Esta pregunta parece vergonzosamente simple, pero no he podido encontrar una respuesta.
¿Cuál es el equivalente de PHP a la siguiente línea de código C #?
string str = "\u1000";
Esta muestra crea una cadena con un solo carácter Unicode cuyo "valor numérico Unicode" es 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" sea conocido?
Respuestas:
Como JSON admite directamente la
\uxxxx
sintaxis, lo primero que se me ocurre es:Otra opción sería usar
mb_convert_encoding()
o utilice la asignación directa entre UTF-16BE (big endian) y el punto de código Unicode:
fuente
\uxxxx
sintaxis Unicode, por lo que puede utilizarlajson_decode
para trabajar en una representación de cadena JSON creada artísticamente. Sin embargo, cambié la redacción para aclarar eso.echo json_decode('\u201B');
Lo que se refiere a una sola cita revertida Sin embargo, no funciona, lo que significa que no hay salida (incluso si se canaliza ahd
)echo json_decode('"\u201B"');
. Las comillas dobles alrededor del símbolo Unicode son obligatorias.PHP 7.0.0 ha introducido la sintaxis "escape de punto de código Unicode" .
Ahora es posible escribir caracteres Unicode fácilmente utilizando una cadena entre comillas dobles o heredoc , sin llamar a ninguna función.
fuente
wordwrap($longLongText, 20, "\u{200B}", true);
( espacio de ancho cero es)Me pregunto por qué nadie ha mencionado esto todavía, pero puedes hacer una versión casi equivalente usando secuencias de escape en cadenas dobles :
Ejemplo ASCII:
Entonces, para su caso, todo lo que necesita hacer es
$str = "\x30\xA2";
. Pero estos son bytes , no caracteres. La representación de bytes del punto de código Unicode coincide con UTF-16 big endian, por lo que podríamos imprimirlo directamente como tal:Si está usando una codificación diferente, necesitará alterar los bytes en consecuencia (principalmente hecho con una biblioteca, aunque también es posible a mano).
UTF-16 pequeño ejemplo endian:
UTF-8 ejemplo:
También existe la
pack
función, pero puede esperar que sea lenta.fuente
PHP no conoce estas secuencias de escape Unicode. Pero como las secuencias de escape desconocidas no se ven afectadas, puede escribir su propia función que convierta tales secuencias de escape Unicode:
O con una expresión de función anónima en lugar de
create_function
:Su uso:
fuente
Esto tambien funciona. Sin embargo, la solución json_decode () es mucho más rápida (alrededor de 50 veces).
fuente
Prueba Portable UTF-8 :
Todos funcionan exactamente de la misma manera. Puede obtener el punto de código de un personaje con
utf8_ord()
. Lea más sobre Portable UTF-8 .fuente
Como lo mencionaron otros, PHP 7 introduce soporte para la
\u
sintaxis Unicode directamente.Como también mencionaron otros, la única forma de obtener un valor de cadena a partir de cualquier descripción sensible de caracteres Unicode en PHP, es convirtiéndolo de otra cosa (por ejemplo, análisis JSON, análisis HTML o alguna otra forma). Pero esto tiene un costo de rendimiento en tiempo de ejecución.
Sin embargo, hay otra opción. Puede codificar el carácter directamente en PHP con
\x
escape binario. La\x
sintaxis de escape también es compatible con PHP 5 .Esto es especialmente útil si prefiere no ingresar el carácter directamente en una cadena a través de su forma natural. Por ejemplo, si se trata de un carácter de control invisible u otro espacio en blanco difícil de detectar.
Primero, un ejemplo de prueba:
Tenga en cuenta que, como mencionó Pacerier en otra respuesta, este código binario es exclusivo de una codificación de caracteres específica. En el ejemplo anterior,
\xE2\x80\x8A
es la codificación binaria para U + 200A en UTF-8.La siguiente pregunta es, ¿cómo llegas de
U+200A
a\xE2\x80\x8A
?A continuación se muestra un script PHP para generar la secuencia de escape para cualquier carácter, basado en una cadena JSON, una entidad HTML o cualquier otro método una vez que lo tiene como una cadena nativa.
fuente
$ msg = '67714eac99c500200054006f006b0079006f002000530074006100740069006f006e003a0020';
echo unicode_to_textstring ($ str);
fuente