2010-01-31 2 views
3

J'ai fait un CMS en PHP qui manipule avec des données de MySQL.
Dans mon CMS, j'ai des champs de saisie dans lesquels j'aimerais que la saisie semi-automatique de jQuery soit implémentée. Fondamentalement, l'idée est de créer des tableaux de jQuery à partir de tables MySQL ...Problème d'encodage de caractères dans PHP/MySQL/jQuery

Je travaille avec PHP 5.3.0, MySQL 5.0.82 et Eclipse 3.4.2. Mon projet PHP dans Eclipse est codé en UTF-8. Mes pages CMS sont en codage de caractères UTF-8 (<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />). Le site Web lui-même est également encodé en UTF-8. Base de données MySQL, et toutes les tables sont en UTF-8 (utf8_general_ci).

A ce moment tout fonctionne bien si je suis entrée que des lettres (même internationales et des symboles étranges), mais si j'entre certains de ces personnages ", &, < ou >, je rencontre quelques problèmes graves ... Quand j'entre un tel texte, tout semble bien dans ma base de données, mais quand j'essaye de créer un tableau pour jQuery, il crée une erreur à cause des guillemets (je suppose que même les guillemets simples posent problème ici ... Donc Je suppose que je devrais leur échapper d'une façon ou d'une autre, n'est-ce pas? Ensuite, j'utilise le htmlspecialchars de PHP et le tableau de jQuery est créé correctement. Même lorsque je clique dans le champ de saisie et commence à taper du texte, la saisie semi-automatique affiche tous ces caractères correctement. Mais si je sélectionne réellement l'un des enregistrements avec ces caractères, ils apparaissent soudainement comme des caractères échappés de html (&quot;, &amp;, &lt;, &gt;). J'ai donc essayé d'appliquer htmlspecialchars_decode à ce même champ de saisie mais cela n'a pas aidé ... Y a-t-il un moyen d'afficher correctement ces caractères dans mon champ de saisie lorsque je sélectionne un enregistrement de la saisie semi-automatique de jQuery?

J'ai essayé de google le problème, mais je n'ai rien trouvé pour résoudre mon problème ... S'il vous plaît aider!
Merci d'avance!


EDIT: Ceci est la façon dont je suis en train de créer un tableau pour jQuery ($tags est juste un simple tableau):

<?php 
$t = implode(", ", $tags); 
?> 
<script> 
$(document).ready(function(){ 
    var data_tags = "<?php echo htmlspecialchars($t); ?>".split(" | "); 
    $("#input_tags").autocomplete(data_tags, { multiple: true, multipleSeparator: ", " }); 
}); 
</script> 

Je sais qu'il est peut-être pas la meilleure façon, mais en général il fonctionne :)

Je suis la génération d'un champ de saisie de cette façon:

<?php 

function inputField($label, $name, $type, $size, $default=NULL, $misc=NULL){ 

    $printInput = "<tr><td align=\"right\" valign=\"top\">\n"; 
    $printInput .= $label; 
    $printInput .= "</td><td>\n"; 
    $printInput .= "<input type=\"".$type."\" size=\"".$size."\" name=\"".$name."\" id=\"".$name."\" value=\"".$default."\"> ".$misc."\n"; 
    $printInput .= "</td></tr>\n"; 

    return $printInput; 

} 

echo inputField("TAGS", "input_tags", "text", 70, $db_tags); 
?> 
+0

Sont-ils en cours de codage double? – alex

+0

Non .. J'insère des chaînes dans et sortir de DB sans fonctions spéciales ... Juste 'comme c'est' ... :) – errata

Répondre

4

Essayez json_encode(), ce qui nécessite PHP 5.2.0 ou supérieur.

EDIT Vous n'avez pas besoin des guillemets autour d'une valeur json_encoded:

var data_tags = <?php echo json_encode($t); ?>; 
+0

Si je remplace htmlspecialchars() avec json_encode() je me lance dans le turbo-chaos! Les caractères internationaux (comme č, ć, ž, š, đ) sont tous foirés, même ma saisie semi-automatique ne fonctionne plus! :( – errata

+0

@errata: pouvez-vous nous montrer un exemple du code que vous écrivez? –

+0

Bien sûr que je peux ... J'ai édité mon premier post déjà, et je le mettrai à jour avec un peu plus de code ... – errata

0

Essayez d'utiliser htmlentities(); à la place.

+0

J'ai déjà essayé, mais si je remplace htmlspecialchars() par htmlentities(), je suis encore plus en désordre qu'avec json_encode()! Tous les caractères qui ne sont pas des lettres latines sont en désordre complet! Vous connaissez celui-ci: :) – errata

Questions connexes