Carácter Unicode en cadena PHP
Esta pregunta parece vergonzosamente simple, pero no he podido encontrar una respuesta.
¿Cuál es el equivalente PHP a la siguiente línea de código C#?
string str = "\u1000";
Este ejemplo crea una cadena con un único carácter Unicode cuyo "valor numérico Unicode" está 1000
en hexadecimal ( 4096
en decimal).
Es decir, en PHP, ¿cómo puedo crear una cadena con un solo carácter Unicode cuyo "valor numérico Unicode" se conozca?
PHP 7.0.0 ha introducido la sintaxis de "escape de punto de código Unicode" .
Ahora es posible escribir caracteres Unicode fácilmente usando una cadena entre comillas dobles o una cadena heredoc , sin llamar a ninguna función.
$unicodeChar = "\u{1000}";
Debido a que JSON admite directamente la \uxxxx
sintaxis, lo primero que me viene a la mente es:
$unicodeChar = '\u1000';
echo json_decode('"'.$unicodeChar.'"');
Otra opción sería utilizarmb_convert_encoding()
echo mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');
o utilice el mapeo directo entre UTF-16BE (big endian) y el punto de código Unicode:
echo mb_convert_encoding("\x10\x00", 'UTF-8', 'UTF-16BE');
Me pregunto por qué nadie ha mencionado esto todavía, pero puedes hacer una versión casi equivalente usando secuencias de escape entre comillas dobles :
\x[0-9A-Fa-f]{1,2}
La secuencia de caracteres que coinciden con la expresión regular es un carácter en notación hexadecimal.
Ejemplo ASCII:
<?php
echo("\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x21");
?>
¡Hola Mundo!
Entonces, para tu caso, todo lo que necesitas hacer es $str = "\x30\xA2";
. Pero estos son bytes , no caracteres. La representación en bytes del punto de código Unicode coincide con el big endian UTF-16, por lo que podríamos imprimirlo directamente como tal:
<?php
header('content-type:text/html;charset=utf-16be');
echo("\x30\xA2");
?>
ア
Si está utilizando una codificación diferente, necesitará modificar los bytes en consecuencia (principalmente hecho con una biblioteca, aunque también es posible hacerlo manualmente).
Ejemplo de little endian UTF-16:
<?php
header('content-type:text/html;charset=utf-16le');
echo("\xA2\x30");
?>
ア
Ejemplo de UTF-8:
<?php
header('content-type:text/html;charset=utf-8');
echo("\xE3\x82\xA2");
?>
ア
También existe la pack
función, pero puedes esperar que sea lenta.