Problème accents

omlaly - 16 févr. 2013 à 12:02
 omlaly - 17 févr. 2013 à 19:52
Bonjour,

Après avoir réussi à insérer les articles dans la base de données dont voici le code :
$villages=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["villages"])));
$categorie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_article'])));

// Insertion de l'article dans la base de données
$req_insertion_articles = "INSERT INTO articles (nom_village,nom_categorie, date_depot, titre_article, texte_article, auteur_article) VALUES ('$villages','$categorie', now(), '$titre_article', '$texte_article', '$auteur_article')";
$query_insertion_articles = mysql_query($req_insertion_articles) or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error()); // Envoie une requête à un serveur MySQL


J'aimerais les afficher (selon deux conditions), ça ça marche. Seul problème, les accents, j'aimerais que lorsqu'il y a des accents, qu'ils s'affichent correctement. Je vous mets le code (j'ai mis comme titre : Mon premier article titre et comme contenu de l'article : Contenu Article) :

$messagesParPage=5; // Nombre de messages affichés par pages

$retour_total=mysql_query('SELECT COUNT(*) AS id_article FROM articles WHERE nom_categorie = "categorie" AND nom_village	= "village"')  or die ('Erreur sur la requête SQL concernant le calcul du nombre d\'articles concernant'.mysql_error()); // Envoie une requête à un serveur MySQL -  Récupération du contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); // Rangement de $retour_total sous la forme d'un tableau
$total=$donnees_total['total']; // Récupération du total pour le placer dans la variable $total

// Comptage du nombre de pages
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // Calculer la première entrée à lire

// La requête SQL pour récupérer les messages de la page actuelle

$retour_messages=mysql_query('SELECT * FROM articles WHERE nom_categorie = "categorie" AND nom_village = "village" ORDER BY id_article DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die ('Erreur sur la requête SQL concernant le nombre d\'articles concernant le village et la catégorie'.mysql_error()); // Envoie une requête à un serveur MySQL

while($donnees_messages=mysql_fetch_assoc($retour_messages)) { // Lecture des entrées une à une grâce à une boucle

     // Affichage des messages avec le design
     // nl2br : Insère un retour à la ligne HTML à chaque nouvelle ligne - pour prendre en compte les sauts de ligne dans le message.
     echo ''.nl2br(mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['titre_article'])))).',

----

'.nl2br(mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['texte_article']))).',

----

Posté par : '.(stripslashes(mysql_real_escape_string(htmlspecialchars($donnees_messages['auteur_article']))))).' le '.mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['date_depot']))).'

';
    // Ajout des sauts de ligne pour espacer les messages (
)   
}

echo 'Page : '; // Centrer la liste des pages pour l'affichage
for($i=1; $i<=$nombreDePages; $i++) // Boucle
{
     // Condition
     if($i==$pageActuelle) // S'il s'agit de la page actuelle
     {
         echo ' [ '.$i.' ] '; 
     }	
     else
     {
          echo ' [page.php?page='.$i.' '.$i.'] ';
     }
}
echo '

';
}


Voici le résultat affiché sur la page :
Mon premier article titre

Contenu Article



Posté par : auteur le 2013-02-16 11:36:30


A noter que j'utilise un éditeur TINYMCE pour poster le contenu de l'article. Donc, quand j'en écrit un, ça met automatiquement des balises HTML telles que

ou /
.

Lorsque je vais sur PHPMyAdmin, je vois le contenu de l'article avec les balises HTML (qui permettent la mise en page).

Est-ce qu'il faut que je fasse quelque chose dans la requête SQL pour ne pas qu'il enregistre la mise en page (je ne crois pas mais je pose quand même la question) ? Ou lors de l'affichage du message ?

En gros, j'aimerais que les articles s'affichent sans balises HTML de sorte à qu'ils soient lisibles tout simplement...

En attendant vos réponses, je continue mes recherches...
Cordialement

4 réponses

Bonjour,

Sur un site, j'ai vu qu'il fallait :
-changer l'interclassement de la table en mettant un
utf8_unicode_ci (interclassement utf8_unicode_ci)
ce que j'ai fait avec la requête SQL suivante :
ALTER TABLE `articles` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci


-mettre la balise HTML suivante :
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >


-création d'un fichier .htaccess à la racine en mettant :
AddDefaultCharset	UTF-8 


Je l'ai fait désormais quand j'essaie d'insérer un article (où j'ai mis comme titre : Mon premier article - titre et comme contenu d'article : Contenu Article), ça me met l'erreur suivante :
Erreur sur la requête SQL concernant l'insertion des articlesYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''village','categorie', now(), 'Mon premier article - titre', '<p&g' at line 1


On dirait que ça bloque à partir du contenu de l'article ('<p&g').

Qu'en pensez-vous ?

A noter que ce sont les balises HTML de mise en page qui font planter sinon la requête SQL fonctionne...

En attendant vos réponses, je continue mes recherches...
Cordialement
0
Bonjour,

J'ai trouvé comment ne pas afficher les balises HTML, voici le code :

echo utf8_encode("Mon premier article - contenu - monuments à visiter du village d'aramon

"); 


Le problème que j'ai maintenant, c'est comment l'intégrer dans mon système de pagination. Avez-vous des idées ?

En attendant vos réponses, je continue mes recherches...
Cordialement
0
J'ai trouvé une fonction PHP :
strip_tags
qui enlève les

. Il y a du mieux mais il y a toujours des bugs. Je vous mets le code PHP complet pour que vous y voyez un peu plus clair :
        $villages=mysql_real_escape_string(strip_tags($_POST["villages"]));
$categorie=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['auteur_article'])));

// Insertion de l'article dans la base de données
$req_insertion_articles = "INSERT INTO articles (nom_village,nom_categorie, date_depot, titre_article, texte_article, auteur_article) VALUES ('$villages','$categorie', now(), '$titre_article', '$texte_article', '$auteur_article')";
$query_insertion_articles = mysql_query($req_insertion_articles) or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error()); // Envoie une requête à un serveur MySQL


Je vous mets le résultat obtenu :
Mon premier article - contenu - monuments à visiter du village d\'nbbbv


Comme vous le voyez, il ne reste plus à transformer les codes des caractères spéciaux HTML en lettres (ici :
à
en à) et à enlever le caractère d'échappement devant la quote.

Si vous avez des idées, n'hésitez pas !!!

Cordialement
0
J'ai réussi à supprimer le caractère d'échappement (\) devant la quote et transformer
à
en à en enlevant
mysql_real_escape_string
pour le texte de l'article.

Je vous met le code PHP :
$villages=mysql_real_escape_string(strip_tags($_POST["villages"]));
$categorie=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['titre_article'])));
$texte_article=strip_tags($_POST['texte_article']);
$auteur_article=mysql_real_escape_string(htmlspecialchars(strip_tags($_POST['auteur_article'])));


Mais, le fait d'avoir supprimé
mysql_real_escape_string
, ça enlève la protection, non ? Si oui, comment faire ?

Cordialement
0
Rejoignez-nous