2013-02-06 1 views
2

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?

+0

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

+0

Corrigez-moi si je me trompe, mais "htmlspecialchars()" ne suffirait-il pas? – Pateman

+0

@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 " –

Répondre

0

Je vais abandonner parce que je ne trouve aucune solution. La fonction email() n'est pas non plus sûre et je vais utiliser phpmailer ou swiftmailer (et je penche pour ce dernier).

Questions connexes