Je le testcase pour la fonction mise en jachère php function_var():php filter_var FILTER_FLAG_ENCODE_HIGH
<?php
$inputvalue = "Ž"; //NUM = 142 on the ASCII extended list
$sanitized = filter_var($inputvalue, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH);
echo 'The sanitized output: '.$sanitized."\n"; // --> & #197;& #189; (Å ½)
?>
Si vous exécutez l'extrait ci-dessus, la sortie est pas ce que je pense être retourné. Le Ž est le numéro 142 dans la liste ASCII étendue (voir: ascii-code [dot] com). Donc ce que je m'attends à recevoir est le '& # 142;' (chaîne, sans l'espace).
J'ai eu help pour trouver ce qui ne va pas Je ne sais pas comment le résoudre pour le moment.
Si vous convertissez 'Ž' en octets Hex UTF-8, vous obtenez: C5 BD. Ces octets hexadécimaux correspondent aux valeurs hexadécimales ISO-8859: Å ½ (voir: http://cs.stanford.edu/~miles/iso8859.html). Ces 2 caractères sont ensuite décodés par filter_var en '& # 197; & # 189; '.
Voir cette onlineconverter !!!: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C5%BD&mode=char
Donc, fondamentalement, ce qui se passe: UTF-8 octets sont utilisés pour les traduire en caractères latins-1 octets. La page du convertisseur indique la mise en jachère: "UTF-8 octets comme caractères Latin-1" est ce que vous voyez généralement lorsque vous affichez un fichier UTF-8 avec un terminal ou un éditeur qui ne connaît que les caractères 8 bits.
Je ne pense pas que mon éditeur soit le problème. J'utilise un Mac avec Coda 2 (UTF-8 par défaut). Le test a également été testé sur une page html5 avec un jeu de caractères meta à utf-8. En outre, j'utilise un serveur XAMPP localhost defaut. Avec Firebug dans Firefox, j'ai également vérifié si le fichier était servi en UTF-8 (c'est le cas).
Quelqu'un at-il une idée de comment je peux résoudre ce problème d'encodage?
Est-ce que '$ inputvalue' est codé en dur dans le script ou provient-il d'une entrée utilisateur ou d'une base de données? – Mike
Corrigez-moi si je me trompe, mais "htmlspecialchars()" ne suffirait-il pas? – Pateman
@pateman: non, htmlspecialchars ne fait que '<>" '& ', par exemple les métacaractères html, le considère comme l'équivalent html de mysql_real_escape_string() .htmlentities() est le plus générique" encoder n'importe quoi " –