PHP convierte unicode a hexadecimal

Una aplicación quiere que inserte cadenas como text encoded using hex values in proper coding., siendo la codificación Unicode_No_Compression

Por ejemplo, para Sześć siedem la cadena hexadecimal correcta es 0053007A0065015B0107002000730069006500640065006D,
Źdźbło = 01790064017A00620142006F
String with no special chars =0053007400720069006E0067002000770069007400680020006E006F0020007300700065006300690061006C002000630068006100720073

Intenté jugar con MySQL HEX()/UNHEX() y dechex() PHP, pero no pude averiguar cómo hacer esta conversión. ¿Algunas ideas?

preguntado el 31 de julio de 12 a las 15:07

2 Respuestas

Básicamente, estás viendo la versión hexadecimal de la codificación UCS-2, supongo. Por lo tanto:

php > echo strtoupper(bin2hex(iconv('UTF-8', 'UCS-2', 'Źdźbło')));
01790064017A00620142006F

Respondido 31 Jul 12, 15:07

Estoy obteniendo resultados ligeramente diferentes pastebin.com/cw5VuTgM , alguna idea de por qué? - robusto

Problema de little-endian frente a big-endian, que depende de la máquina. Probar UCS-2BE para usar explícitamente big-endian. - deceze

Prueba esto:

$out = implode("",array_map(function($x) {return sprintf("%04X",ord($x));},str_split($in)));

Un trazador de líneas ;)

Respondido 31 Jul 12, 15:07

Oh... no es multibyte seguro, ¿verdad? - Niet el oscuro Absol

Ninguno ord ni str_split es. - deceze

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.