2011-09-30 24 views
13

Czy tłumaczenie kodu poniżej w ogóle jest możliwe za pomocą PHP?Jak konwertować znaki UTF8 na znaki liczbowe w PHP

Poniższy kod zapisano w języku JavaScript. W razie potrzeby zwraca html z numerycznymi odnośnikami znaków. Dawny. smslån -> smslån

Nie udało mi się utworzyć tłumaczenia. This script wyglądało to może działać, ale zwraca å dla å zamiast å jak poniżej javascript robi.

function toEntity() { 
    var aa = document.form.utf.value; 
    var bb = ''; 
    for(i=0; i<aa.length; i++) 
    { 
    if(aa.charCodeAt(i)>127) 
    { 
     bb += '&#' + aa.charCodeAt(i) + ';'; 
    } 
    else 
    { 
     bb += aa.charAt(i); 
    } 
    } 
    document.form.entity.value = bb; 
} 

PHP's ord function brzmi jak robi to samo, co charCodeAt, ale tak nie jest. Dostaję dla å używając ord i używając charCodeAt. To lub mam niewiarygodnie trudne problemy z kodowaniem.

+0

Masz na myśli [jest?] (Http://www.php.net/manual/en/function.mb-encode-numericentity.php#88586) lub za odpowiedź phihag poniżej, w zasadzie? Nie widzę nigdzie wersji UTF8. – darkAsPitch

+0

Nie jestem pewien. Próbowałem grać z kodem Miguela przez 20 minut, ale wydaje mi się, że to, co sugerowałem poniżej, było dokładnie tym, czego potrzebowałem. W każdym razie pod względem tej aplikacji. Czy jest jakiś powód, by sądzić, że tak nie jest? – darkAsPitch

Odpowiedz

32

Zastosowanie mb_encode_numericentity:

$convmap = array(0x80, 0xffff, 0, 0xffff); 
echo mb_encode_numericentity($utf8Str, $convmap, 'UTF-8'); 
+1

Tak, gdy chciałem odpowiedzieć, zobaczyłem, że już to zrobiłeś, więc zauważyłem. ;) To naprawdę fajna funkcja do tego zadania. – hakre

+3

Martwi mnie tylko to, że $ convmap - co to dokładnie jest? Nie ma wielkiego wyjaśnienia na stronie podręcznika. Czy muszę wprowadzić wszystkie możliwe konwersje lub coś takiego? Mój słaby umysł odczytuje go jako "mapę konwersji". – darkAsPitch

+6

@darkAsPitch Jest brudny. '$ convmap' określa, które znaki kodować. Powinna to być funkcja wywołania zwrotnego, ale prawdopodobnie byłaby powolna, a użycie wywołań zwrotnych w php poprzedzi tę funkcję. Pierwsze dwie cyfry określają zakres (włącznie) kodów znaków do przekonwertowania, a trzeci i czwarty oraz offset i maskę bitową (0 i 0xfff dla wszystkich praktycznych celów). Na przykład, jeśli chcesz przekonwertować wszystkie znaki na jednostki HTML, podaj 'array (0, 0xfff, 0, 0xfff)'. Zasadniczo, '(0x80, 0xffff, ..)' jest odpowiednikiem 'charCode> 127' w twoim pytaniu. – phihag

Powiązane problemy