Problème de parsing php

Fermé
jdsaith Messages postés 7 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 2 septembre 2009 - 1 sept. 2009 à 21:22
jdsaith Messages postés 7 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 2 septembre 2009 - 2 sept. 2009 à 23:39
Bonjour,
je suis en train de construire une petite application qui permet de gérer un site web depuis un forum phpBB2, et pour faire fonctionner le tout, je dois parser le BBcode en balises HTML...

tout se fait très bien, excepté pout les accents... il m'affiche des carrés à la place et je n'ai aucune idée de pourquoi!

voici la partie "parsing" de ma page:
	$texte = nl2br($texte);
		$searchstrings = array(":".$data_3['bbcode_uid'] , "[i]" , "[/i]" , "[b]" , "[/b]" , "[u]" , "[/u]","[size=7]","[size=9]","[size=12]","[size=18]","[size=24]","[/size]", "[url]", "[/url]","[/color]", "À" , "É", "È", "à" , "é", "è" , "Ç", "ç");
		$replacestrings = array("" , "<i>" , "</i>" , "<b>" , "</b>" , "<u>" , "</u>","<font size=\"1\">","<font size=\"2\">","<font size=\"5\">","<font size=\"6\">","<font size=\"7\">" ,"</font>", "<a>", "</a>","</font>", "&Agrave;", "&Eacute;", "&Egrave;", "&agrave;", "&eacute;", "&egrave;", "&Ccedil;", "&ccedil;");
		$texte = str_replace($searchstrings, $replacestrings, $texte);
		//echo($texte);
		$search_url_color = array("[","]");
		$replace_url_color = array("<",">");
		while(strpos($texte , "[url=") !== false)
			{
			$converturl1 = strstr($texte , '[url=');
			//echo("couper en avant de \"[url=\" donne: ".$converturl1.'<br>');
			$converturl1 = substr($converturl1, 0, strpos($converturl1, "]")+strlen("]"));
			//echo("couper après \"]\" donne: ".$converturl1.'<br>');
			$converturl2 = str_replace(array("[url=","]"),array("<a href=\"","\">"),$converturl1);
			$texte = str_replace($converturl1,$converturl2,$texte);
			}
		while(strpos($texte , "[color=") !== false)
			{
			$convertcolor1 = strstr($texte , '[color=');
			//echo("couper en avant de \"[color=\" donne: ".$convertcolor1.'<br>');
			$convertcolor1 = substr($convertcolor1, 0, strpos($convertcolor1, "]")+strlen("]"));
			//echo("couper après \"]\" donne: ".$convertcolor1);
			$convertcolor2 = str_replace(array("[color=","]"),array("<font color=\"","\">"),$convertcolor1.'<br>');
			$texte = str_replace($convertcolor1,$convertcolor2,$texte);
			}
		echo($texte."<br><br>");


pourtant, il devrait convertir les accents en
&eacute;
et compagnie... mais il ne le fait pas...


merci beaucoup d'avance pour votre aide!
A voir également:

5 réponses

Bonjour

Il ne le fait pas parce que tu as saisi ton script en ANSI alors que ton $texte est en UTF8 (ou l'inverse).
Donc un 'é' dans $searchstrings n'est pas le même qu'un 'é' dans $texte.

As-tu une idée de l'encodage utilisé par ton éditeur de script, et de celui de $texte ?
0
jdsaith Messages postés 7 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 2 septembre 2009 1
1 sept. 2009 à 23:02
bonjour,

À part l'interclassement de ma table (latin_swedish_ci), je ne vois pas comment vérifier...

*trois minutes plus tard* vive PHPinfo!

la base SQLite est encodée en UTF-8, toujours ça de moins...

maintenant, la page html est donnée en UTF-8 dans les META, mais ça ne joue en rien sur l'Encodage avant qu'elle se rende, si je ne m'abuse...

et celle-là, je l'ai pas trouvée sur PHPinfo.

donc, rendu là, que faire??
0
jdsaith Messages postés 7 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 2 septembre 2009 1
2 sept. 2009 à 00:58
bon bon bon,
Je viens de discuter ave mon hébergeur, qui m'a confirmé que tout son serveur fonctionnait en UTF8, donc si il y a un problème, c'est que le UTF8 ne reconnaît pas les "é", ce dont je doute, vu que mon hébergeur français n'aurait pas choisi un language qui ne compte pas les accents...

c'est donc dans mon code en quelque part le problème, mais je ne le vois vraiment pas. peut être copier-coller un des carrés formés par mon code, qui sait?
0
Le problème, c'est l'éditeur avec lequel tu travailles . Si lui n'est pas en UFT8, comme je l'expliquais dans le message 1, le 'é' qui apparaît dans $searchstrings n'est pas codé en UTF8. Quand tu le recherches avec une chaîne qui contient un 'é' en UTF8, il ne peut pas le trouver, ce ne sont pas les mêmes codes.
Vérifie l'encodage de ton éditeur de texte.
Remarque : l'UTF8 (l'unicode en fait) connaît les 'é' mais aussi l'arabe, le chinois et un tas d'autres caractères dont tu ne soupçonnes même pas l'existence. C'est l'un des encodages les plus riches actuellement, c'est pour ça que tout le monde s'y met.
Pour passer complètement à l'UTF8, il faudra que tu choisisses un interclassement utf8 (utf8_general_ci) pour tes tables mysql, et que tu ajoutes une requête SET NAMES UTF8 après la connexion à ta base.
Il y a aussi un paramètre à ajouter à la fonction htmlentities (si tu l'utilises) pour lui dire que tu travailles en utf8.
J'ai fait tout ça récemment (1 mois environ) et je n'ai pas (encore) eu de mauvaises surprises.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jdsaith Messages postés 7 Date d'inscription mercredi 13 août 2008 Statut Membre Dernière intervention 2 septembre 2009 1
2 sept. 2009 à 23:39
J'ai trouvé une solution fonctionnant sans problèmes!

les pages étant en UTF8, il lit sans problèmes les "é"...

donc, en supprimant mes remplacements en "é" , il les affichent sans problème!

donc, probablement que l'encodage regimbe un peu avec ce type de codage...

reste seulement ça a voir.
0