Autor Zpráva
jirka2
Profil
Ahoj, mám takový test a problém. Ve skriptu mám nastaveno mb_internal_encoding("UTF-8"); pak zkoumám bajty znaku 'ě' (viz ě)
$val = unpack('H*', "ě");
echo $val[1];
správně vrátí bajty 0xc49b, což souhlasí s UTF-8 Encoding na výše uvedené stránce. Ale když zadám
echo dechex(mb_ord("ě", "UTF-8"));
dostanu 0x011b což je dle té stránky UTF-16 Encoding. A naopak, výsledek
echo dechex(mb_ord("ě", "UTF-16"));
je 0xc49b, což je UTF-8 Encoding
Vypadá to, jako by to bylo v PHP prohozené. Nebo jsem něco nepochopil... Díky za komentáře a rady.

zdraví Jirka
Firibix
Profil
Reakce na jirku2:
Funkce mb_ord vrací Unicode codepoint daného znaku, to je něco jiného, než číselná hodnota znaku v nějakém konkrétním kódování. Druhý argument funkce mb_ord určuje, v jakém kódování je znak v prvním argumentu.

Znak ě má přiřazený Unicode codepoint U+011B, v UTF-8 kódování je to sekvence 0xC4 0x9B a v UTF-16 0x11B. Následující příklad tedy odpovídá tomu, jak je mb_ord popsána v dokumentaci.

echo dechex(mb_ord("\xc4\x9b", "UTF-8")); // vrací 11b
echo dechex(mb_ord("\x1\x1b", "UTF-16")); // vrací 11b
jirka2
Profil
Firibix:
Díky, to je ono.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0