caratcère bizarre à la place des apostrophes, des points, etc

caratcère bizarre à la place des apostrophes, des points, etc - PHP - Programmation

Marsh Posté le 26-10-2010 à 23:11:18    

Bonjour à toutes et tous,
 
Je suis en train de faire un site internet : http://www.la-grange-sardieres.fr/ [...] on2css.php
 
Si vous allez sur le lien du site, dans le premier menu, si vous cliquez sur "théâtre" et ensuite sur "399 secondes" vous pouvez voir apparaitre dans la fenêtre de droite un texte avec un caractère bizarre : �, à la place des apostrophes, des points , etc.
 
Savez-vous d'où cela pourrait venir ?? J'utilise la police Garamond pour information, mais avec l'Arial c'est pareil.
 
Auriez-vous une solution pour y remédier ??
 
Merci beaucoup pour vos réponses et bonne soirée

Reply

Marsh Posté le 26-10-2010 à 23:11:18   

Reply

Marsh Posté le 26-10-2010 à 23:18:00    

code de caractère différent entre la base de données(latin1) et la page(UTF-8)  :??:
 
vu que tu utilise le htmlspecialchars pour les accent, rajoute l'option qui permet aussi de coder les apostrophes et guillemet.
 

Code :
  1. <?php
  2. $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
  3. echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
  4. ?>



---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 26-10-2010 à 23:25:04    

J'ai testé et cela ne fonctionne pas.
 

Code :
  1. <?php
  2. $idc = $_GET['id'];
  3. require("identification/connexion_sql.php" );
  4. $requete2 = "SELECT id_contenu, photo_contenu, lieu, titre, dateetnbrepage, editeur, texte FROM contenu WHERE contenu.id_contenu='$idc'";
  5. $reponse2 = mysql_query($requete2) or die ("impossible d'effectuer la requête" );
  6. while($affiche2 = mysql_fetch_array($reponse2)) {
  7. $lieu = htmlentities($affiche2['lieu']);
  8. $titre = htmlentities($affiche2['titre']);
  9. $datepage = $affiche2['dateetnbrepage'];
  10. $editeur = htmlentities($affiche2['editeur']);
  11. $texte = htmlentities($affiche2['texte'], ENT_QUOTES);
  12. print '<div id="textDiv"><div class="texte_lieu">'.$lieu.'</div>
  13.       <br />
  14.       <div class="texte_titre">'.$titre.'</div>
  15.       <br />
  16.       <div class="texte_dateetnbrepage">'.$datepage.'</div>
  17.       <div class="texte_editeur">'.$editeur.'</div>
  18.       <br />
  19.       <div class="texte_contenu">'.$texte.'</div><br />
  20. </div>';
  21. }
  22. mysql_close();
  23. ?>

Reply

Marsh Posté le 27-10-2010 à 01:16:48    

Ca vient de jquery je pense.
Tu fais tes appels en ajax si j'ai bien compris.
L'astuce c'est de forcer un header charset + encoder la page comme il faut.
Tu peux choisir le charset que tu veux, l'important, c'est que ce soit le même partout !

Reply

Marsh Posté le 27-10-2010 à 11:39:22    

Aurais-tu un exemple pour me comprendre s'il te plait ??

Reply

Marsh Posté le 27-10-2010 à 13:39:00    

htmlentities mais avec le parametre ENT_QUOTES
 
ceux qui donne

Code :
  1. htmlentities($str, ENT_QUOTES);


 
 
Edit :  
attention au injection SQL, $_GET['id'] n'est pas contrôlé
 


Message édité par stef_dobermann le 27-10-2010 à 13:41:59

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 27-10-2010 à 17:17:18    

j'ai testé, mais cela ne change rien :(

Reply

Marsh Posté le 27-10-2010 à 18:04:19    

c'est un copier coller de word ?

Reply

Marsh Posté le 27-10-2010 à 20:44:29    

quaresma a écrit :

Aurais-tu un exemple pour me comprendre s'il te plait ??


Et bien, mettons que tu choisis de tout faire en UTF-8.
 
Ton fichier php devra débuter ainsi :
 

Code :
  1. header('Content-type: text/html; charset=utf-8');


 
De plus, ton fichier .php doit être encodé en UTF-8 lui-même.
Sur notepad++ : Encodage > Convertir en UTF-8 (Sans BOM)
 
De plus, il faut aussi que ta base SQL, tes champs, et les valeurs dedans soient en UTF-8 !
 
Enfin bref, l'idée c'est de tout harmoniser.
Si des programmes qui interviennent sur une même page (javascript, php, sql) ne renvoient pas le même encodage, ca crée souvent un paquet de merdes...

Reply

Marsh Posté le 27-10-2010 à 21:45:54    

stealth35 a écrit :

c'est un copier coller de word ?


 
Non un copier-coller d'un site internet pour faire un test.
 
 

Pascal le nain a écrit :


Et bien, mettons que tu choisis de tout faire en UTF-8.
 
Ton fichier php devra débuter ainsi :
 

Code :
  1. header('Content-type: text/html; charset=utf-8');


 
De plus, ton fichier .php doit être encodé en UTF-8 lui-même.
Sur notepad++ : Encodage > Convertir en UTF-8 (Sans BOM)
 
De plus, il faut aussi que ta base SQL, tes champs, et les valeurs dedans soient en UTF-8 !
 
Enfin bref, l'idée c'est de tout harmoniser.
Si des programmes qui interviennent sur une même page (javascript, php, sql) ne renvoient pas le même encodage, ca crée souvent un paquet de merdes...


 
Voici mon code :
 

Code :
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3. $idc = $_GET['id'];
  4. require("identification/connexion_sql.php" );
  5. $requete2 = "SELECT id_contenu, photo_contenu, lieu, titre, dateetnbrepage, editeur, texte FROM contenu WHERE contenu.id_contenu='$idc'";
  6. $reponse2 = mysql_query($requete2) or die ("impossible d'effectuer la requête" );
  7. while($affiche2 = mysql_fetch_array($reponse2)) {
  8. $lieu = utf8_encode(htmlentities($affiche2['lieu']));
  9. $titre = utf8_encode(htmlentities($affiche2['titre']));
  10. $datepage = utf8_encode($affiche2['dateetnbrepage']);
  11. $editeur = utf8_encode(htmlentities($affiche2['editeur']));
  12. $texte = utf8_encode(htmlentities($affiche2['texte']));
  13. print '<div id="textDiv"><div class="texte_lieu">'.$lieu.'</div>
  14.       <br />
  15.       <div class="texte_titre">'.$titre.'</div>
  16.       <br />
  17.       <div class="texte_dateetnbrepage">'.$datepage.'</div>
  18.       <div class="texte_editeur">'.$editeur.'</div>
  19.       <br />
  20.       <div class="texte_contenu">'.$texte.'</div><br />
  21. </div>';
  22. }
  23. mysql_close();
  24. ?>


 
Malheureusement, maintenant les ' sont carrément enlevés du texte.
 
Je ne trouve pas la solution :(


Message édité par quaresma le 27-10-2010 à 21:47:02
Reply

Marsh Posté le 27-10-2010 à 21:45:54   

Reply

Marsh Posté le 27-10-2010 à 22:21:14    

J'avais eu soucis similaire. Je l'ai résolu en changeant le type d'encodage à la sauvegarde du fichier !
 
As-tu sauver ton fichier comme il faut ?

Reply

Marsh Posté le 27-10-2010 à 22:29:33    

Oui tout à fait.

Reply

Marsh Posté le 27-10-2010 à 22:57:17    

Citation :

code de caractère différent entre la base de données(latin1) et la page(UTF-8)  :??:


alors il ne reste que ça !!


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 28-10-2010 à 02:52:33    

ouai pour refaire un utf8_encode  ? c'est pas de l'utf-8 a la base ?
htmlentities attend de l'iso en plus, il faut lui passer la paramètre de charset pour qu'il fasse les entités pour l'utf-8


Message édité par stealth35 le 28-10-2010 à 02:53:36
Reply

Marsh Posté le 28-10-2010 à 14:26:35    

C'est bon j'ai modifié avec notepad++ et le problème est résolu (à priori)

Reply

Marsh Posté le 28-10-2010 à 20:54:45    

quaresma a écrit :

C'est bon j'ai modifié avec notepad++ et le problème est résolu (à priori)


modifié quoi ?

Reply

Marsh Posté le 28-10-2010 à 21:22:44    

à mon avis il a du (re)sauvegarder les fichiers en UTF8 sans BOM


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 28-10-2010 à 21:27:47    

en changeant le type d'encodage en UTF8 sans BOM.
 
Puis d'autres fonctions, voici le code :
 

Code :
  1. <?php
  2. header('Content-type: text/html; charset=UTF-8');
  3. $idc = $_GET['id'];
  4. require("identification/connexion_sql.php" );
  5. $requete2 = "SELECT id_contenu, photo_contenu, lieu, titre, dateetnbrepage, editeur, texte FROM contenu WHERE contenu.id_contenu='$idc'";
  6. $reponse2 = mysql_query($requete2) or die ("impossible d'effectuer la requête" );
  7. while($affiche2 = mysql_fetch_array($reponse2)) {
  8. $lieu = stripslashes(htmlspecialchars($affiche2['lieu']));
  9. $titre = stripslashes(htmlspecialchars($affiche2['titre']));
  10. $datepage = $affiche2['dateetnbrepage'];
  11. $editeur = stripslashes(htmlspecialchars($affiche2['editeur']));
  12. $texte = stripslashes(htmlspecialchars($affiche2['texte']));
  13. print '<div id="textDiv"><div class="texte_lieu">'.$lieu.'</div>
  14.       <br />
  15.       <div class="texte_titre">'.$titre.'</div>
  16.       <br />
  17.       <div class="texte_dateetnbrepage">'.$datepage.'</div>
  18.       <div class="texte_editeur">'.$editeur.'</div>
  19.       <br />
  20.       <div class="texte_contenu">'.$texte.'</div><br />
  21. </div>';
  22. }
  23. mysql_close();
  24. ?>

Reply

Marsh Posté le 29-10-2010 à 14:01:30    

pourquoi stripslashes ? tu peux aussi faire direct fetch_assoc, et faut aussi protégé ta valeur $idc


Message édité par stealth35 le 29-10-2010 à 14:02:39
Reply

Marsh Posté le 29-10-2010 à 14:05:58    

Mais si cela fonctionne comme j'ai fait, c'est bon non ??
 
Merci et bonne journée

Reply

Marsh Posté le 31-10-2010 à 17:32:27    

$idc = $_GET['id'];
en
$idc = intval($_GET['id']);
 
sinon un petit malin pourra faire ce qu'il veut de ton site (car la tu autorises tout a s'executer dans la requete meme des commandes)

Reply

Marsh Posté le 31-10-2010 à 22:18:46    

ravenX11 a écrit :

$idc = $_GET['id'];
en
$idc = intval($_GET['id']);
 
sinon un petit malin pourra faire ce qu'il veut de ton site (car la tu autorises tout a s'executer dans la requete meme des commandes)


 
Comment ça ??

Reply

Marsh Posté le 01-11-2010 à 14:43:35    

si on remplace manuellement dans l'URL id=5 par id=DELETE FROM table WHERE id > 0 ça te vide la table
renseigne-toi sur les injections SQL.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 01-11-2010 à 18:42:55    

NewsletTux a écrit :

si on remplace manuellement dans l'URL id=5 par id=DELETE FROM table WHERE id > 0 ça te vide la table
renseigne-toi sur les injections SQL.


 
whaou c'est chaud ça. Comment faire pour y remédier ??

Reply

Marsh Posté le 01-11-2010 à 19:01:06    

Utilise intval(), comme ravenX11 te l'a dit.
 
intval convertira la chaine en entier. Or un entier ne peux jamais faire de mal ;)

Reply

Marsh Posté le 02-11-2010 à 01:41:49    

OK merci pour l'info.
 
Bonne soirée

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed