Cette question a l'air d'une simplicité embarrassante, 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";
Cet exemple crée une chaîne avec un seul caractère Unicode dont la «valeur numérique Unicode» est 1 000 en hexadécimal (4 096 en décimal).
Autrement dit, en PHP, comment puis-je créer une chaîne avec un seul caractère Unicode dont la "valeur numérique Unicode" est connue?
Réponses:
Étant donné que JSON prend directement en charge la
\uxxxx
syntaxe, la première chose qui me vient à l'esprit est:Une autre option serait d'utiliser
mb_convert_encoding()
ou utilisez le mappage direct entre UTF-16BE (big endian) et le codet Unicode:
la source
\uxxxx
syntaxe Unicode afin que vous puissiez l'utiliserjson_decode
pour travailler sur une représentation de chaîne JSON créée artificiellement. J'ai cependant changé le libellé pour clarifier cela.echo json_decode('\u201B');
ce qui fait référence à une seule citation inversée.Cependant, cela ne fonctionne pas, ce qui signifie aucune sortie (même si elle est canaliséehd
)echo json_decode('"\u201B"');
. Les guillemets doubles autour du symbole Unicode sont obligatoires.PHP 7.0.0 a introduit la syntaxe "Unicode codepoint escape" .
Il est désormais possible d'écrire facilement des caractères Unicode en utilisant une chaîne entre guillemets ou une chaîne heredoc , sans appeler aucune fonction.
la source
wordwrap($longLongText, 20, "\u{200B}", true);
( espace de largeur zéro )Je me demande pourquoi personne n'a encore mentionné cela, mais vous pouvez faire une version presque équivalente en utilisant des séquences d'échappement entre guillemets doubles :
Exemple ASCII:
Donc, pour votre cas, tout ce que vous avez à faire est
$str = "\x30\xA2";
. Mais ce sont des octets , pas des caractères. La représentation en octets du point de code Unicode coïncide avec le big endian UTF-16, nous pouvons donc l'imprimer directement en tant que tel:Si vous utilisez un encodage différent, vous devrez modifier les octets en conséquence (principalement avec une bibliothèque, bien que possible à la main aussi).
Exemple de petit boutiste UTF-16:
Exemple UTF-8:
Il y a aussi la
pack
fonction, mais vous pouvez vous attendre à ce qu'elle soit lente.la source
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:
Ou avec une expression de fonction anonyme au lieu de
create_function
:Son utilisation:
la source
Cela fonctionne aussi. Cependant, la solution json_decode () est beaucoup plus rapide (environ 50 fois).
la source
Essayez Portable UTF-8 :
Tous fonctionnent exactement de la même manière. Vous pouvez obtenir le point de code d'un caractère avec
utf8_ord()
. En savoir plus sur Portable UTF-8 .la source
Comme mentionné par d'autres, PHP 7 introduit
\u
directement le support de la syntaxe Unicode.Comme d'autres l'ont également mentionné, la seule façon d'obtenir une valeur de chaîne à partir de toute description de caractère Unicode sensée en PHP, est de la convertir à partir de quelque chose d'autre (par exemple l'analyse JSON, l'analyse HTML ou une autre forme). Mais cela a un coût d'exécution.
Cependant, il existe une autre option. Vous pouvez encoder le caractère directement en PHP avec
\x
échappement binaire. La\x
syntaxe d'échappement est également prise en charge dans PHP 5 .Ceci est particulièrement utile si vous préférez ne pas saisir le caractère directement dans une chaîne sous sa forme naturelle. Par exemple, s'il s'agit d'un caractère de contrôle invisible ou d'un autre espace difficile à détecter.
Tout d'abord, un exemple de preuve:
Notez que, comme mentionné par Pacerier dans une autre réponse, ce code binaire est unique à un codage de caractères spécifique. Dans l'exemple ci-dessus,
\xE2\x80\x8A
est le codage binaire pour U + 200A en UTF-8.La question suivante est de savoir comment passer de
U+200A
à\xE2\x80\x8A
?Vous trouverez ci-dessous un script PHP pour générer la séquence d'échappement pour n'importe quel caractère, basée sur une chaîne JSON, une entité HTML ou toute autre méthode une fois que vous l'avez en tant que chaîne native.
la source
$ msg = '67714eac99c500200054006f006b0079006f002000530074006100740069006f006e003a0020';
echo unicode_to_textstring ($ str);
la source