To jest zakodowane: \u00d6
To jest dekodowany: Ö
Jak kodować ciągi takie jak u00d6?
Co funkcja muszę używać do dekodowania ten ciąg w coś czytelnego?
\u00d6asdf -> Öasdf
To jest zakodowane: \u00d6
To jest dekodowany: Ö
Jak kodować ciągi takie jak u00d6?
Co funkcja muszę używać do dekodowania ten ciąg w coś czytelnego?
\u00d6asdf -> Öasdf
Normalnie byłoby to metoda urldecode, ale to nie ma zastosowania do znaków Unicode, jak twoje. Spróbuj tego Zamiast:
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);
}
przekonwertować na UTF-8, wykonaj następujące czynności:
preg_replace('/\\\\u([0-9a-f]{4})/ie',
'mb_convert_encoding("&#x$1;", "UTF-8", "HTML-ENTITIES")',
$string);
ponieważ jest Cytowanie używany w JSON, innym rozwiązaniem byłoby json_decode
. Wymagałoby to jednak również uniknięcia podwójnych cudzysłowów i odwrotnych ukośników przed (z wyjątkiem sekwencji ewakuacyjnych \uXXXX
) i dodawania podwójnych cudzysłowów wokół napisu. Jeśli jednak ciąg jest rzeczywiście kodowany JSON i to było pierwotnie uzasadnione pytanie, poprawną odpowiedzią byłoby oczywiście użycie metody json_decode
zamiast powyższej metody.
Jest kilka rzeczy nie w porządku ... Zamiast tego zastępujesz% uXXXX zamiast \ uXXXX, zamieniaj sekwencje na encje (co byłoby w porządku dla wyświetlania ciągu znaków, ale teraz musisz powiedzieć htmlspecialchars, aby nie podwójnie kodować łańcucha znaków i oczywiście, teraz nie rozróżniasz html, które są pierwotnie w łańcuchu dla wygenerowanych); na koniec wywołujesz kod urldecode, który nie ma nic wspólnego z pytaniem - kodowanie URL-i koduje bajty (maksymalna wartość to% FF) i na pewno nie dekoduje utworzonych przez ciebie html. – Artefacto