140 votes

Caractère Unicode dans une chaîne PHP

Cette question semble extrêmement simple, mais je n’ai pas pu trouver de réponse.

Quel est l'équivalent PHP de la ligne de code C # suivante?

 string str="\u1000";
 

(Cela crée une chaîne avec un seul caractère Unicode dont la "valeur numérique Unicode" est 0x1000 (décimal 4096)).

C'est. En PHP, comment puis-je créer une chaîne avec un seul caractère Unicode dont la "valeur numérique Unicode" est celle que je connais?

Je vous remercie.

163voto

Stefan Gehrig Points 47227

Comme JSON prend directement en charge la syntaxe \uxxxx la première chose qui me vient à l’esprit est la suivante:

 $unicodeChar = '\u1000';
echo json_decode('"'.$unicodeChar.'"');
 

Une autre option serait d'utiliser mb_convert_encoding()

 echo mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');
 

ou utilisez le mappage direct entre UTF-16BE (big endian) et le codepoint Unicode:

 echo mb_convert_encoding("\x10\x00", 'UTF-8', 'UTF-16BE');
 

20voto

Gumbo Points 279147

PHP ne connaît pas ces séquences d'échappement Unicode. Mais comme les séquences d'échappement inconnues ne sont pas affectées, vous pouvez écrire votre propre fonction qui convertit ces séquences d'échappement Unicode:

 function unicodeString($str, $encoding=null) {
    if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding');
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', create_function('$match', 'return mb_convert_encoding(pack("H*", $match[1]), '.var_export($encoding, true).', "UTF-16BE");'), $str);
}
 

Ou avec une expression de fonction anonyme au lieu de create_function :

 function unicodeString($str, $encoding=null) {
    if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding');
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', function($match) use ($encoding) {
        return mb_convert_encoding(pack('H*', $match[1]), $encoding, 'UTF-16BE');
    }, $str);
}
 

Son utilisation:

 $str = unicodeString("\u1000");
 

7voto

flori Points 695
 html_entity_decode('エ', 0, 'UTF-8');
 

Cela fonctionne aussi. Cependant, la solution json_decode () est beaucoup plus rapide (environ 50 fois).

7voto

Hamid Sarfraz Points 179

Essayez Portable UTF-8 :

 $str = utf8_chr( 0x1000 );
$str = utf8_chr( '\u1000' );
$str = utf8_chr( 4096 );
 

Tous fonctionnent exactement de la même manière. Vous pouvez obtenir le code d'un personnage avec utf8_ord() . En savoir plus sur Portable UTF-8 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: