Esto está codificado: \u00d6
Esta es decodificado: Ö
¿Cómo codifica cadenas como u00d6?
Qué función que tengo que usar para decodificar esa cadena en algo legible?
\u00d6asdf -> Öasdf
Esto está codificado: \u00d6
Esta es decodificado: Ö
¿Cómo codifica cadenas como u00d6?
Qué función que tengo que usar para decodificar esa cadena en algo legible?
\u00d6asdf -> Öasdf
Normalmente este sería el método urldecode, pero no se aplica a los caracteres Unicode, como la suya. Prueba este lugar:
function unicode_urldecode($url)
{
preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);
foreach ($a[1] as $uniord)
{
$utf = '&#x' . $uniord . ';';
$url = str_replace('%u'.$uniord, $utf, $url);
}
return urldecode($url);
}
Convertir en UTF-8, hacer:
preg_replace('/\\\\u([0-9a-f]{4})/ie',
'mb_convert_encoding("&#x$1;", "UTF-8", "HTML-ENTITIES")',
$string);
ya que es el escape que utilizan en JSON, otra opción sería json_decode
. Esto, sin embargo, también requeriría el escape de comillas dobles y barras diagonales anteriores (excepto las de las secuencias de escape \uXXXX
) y la adición de comillas dobles alrededor de la cadena. Sin embargo, si la cadena está codificada en JSON y eso es lo que originalmente motivó la pregunta, la respuesta correcta sería, naturalmente, usar json_decode
en lugar del método anterior.
Aquí hay varias cosas incorrectas ... Sustituye% uXXXX en lugar de \ uXXXX, reemplaza las secuencias por entidades (lo cual estaría bien para mostrar la cadena, excepto que ahora debes decirle a htmlspecialchars que no codifique doblemente la cadena y por supuesto, ahora no distingue entittas html que están originalmente en la cadena para las generadas); finalmente llama a urldecode que no tiene nada que ver con la pregunta: la codificación url codifica bytes (el valor máximo es% FF) y ciertamente no decodifica las entidades html que acaba de crear. – Artefacto