Carácter Unicode en cadena PHP

Resuelto Telaclavo asked hace 54 años • 8 respuestas

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á 1000en hexadecimal ( 4096en decimal).

Es decir, en PHP, ¿cómo puedo crear una cadena con un solo carácter Unicode cuyo "valor numérico Unicode" se conozca?

Telaclavo avatar Jan 01 '70 08:01 Telaclavo
Aceptado

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}";
Blackhole avatar Dec 21 '2015 21:12 Blackhole

Debido a que JSON admite directamente la \uxxxxsintaxis, 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');
Stefan Gehrig avatar May 19 '2011 12:05 Stefan Gehrig

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 packfunción, pero puedes esperar que sea lenta.

Pacerier avatar Jan 27 '2015 17:01 Pacerier