Unicode в IIS 7 на Windows 2008 Server SP2

Имам проста страница в php, която получава аргумент с get метод. Страницата просто отпечатва аргумента. Нищо повече. Работи правилно с английски символи. Ако предам като стойност на аргумент в някакъв Unicode език (и т.н. руски), тогава стойността на аргумента се отпечатва като въпросителни знаци.

Как да решим проблема?

Благодаря ти, Юрий

P.S. добавянето на заглавка с utf-8 не помага.

това е get: mypage.php?src=uploaded_files/пока.mp3

това е кодирането: ‹meta http-equiv="content-type" content="text/html; charset=utf-8">

и това е резултатът: uploaded_files/????.mp3


person Yuri    schedule 01.02.2011    source източник
comment
Моля, покажете повече подробности. Можете ли да направите пример за GET заявката и произтичащия изход? В какво кодиране е вашата страница в момента?   -  person Pekka    schedule 01.02.2011
comment
това е get: mypage.php?src=uploaded_files/пока.mp3 това е кодирането: ‹meta http-equiv=content-type content=text/html; charset=utf-8› и това е резултатът: uploaded_files/????.mp3   -  person Yuri    schedule 01.02.2011


Отговори (1)


Мисля, че проблемът може да е, че PHP не поддържа естествено Unicode. От страницата с документи за низове

Низът е поредица от знаци, следователно символът е същият като байт. Тоест, възможни са точно 256 различни знака. Това също така означава, че PHP няма собствена поддръжка на Unicode. Вижте utf8_encode() и utf8_decode() за някои основни функции на Unicode.

Тази страница препоръчва, ако искате да използвате unicode, който кодирате, тя използва utf8_encode

 $r = "пока.mp3"
 $s = utf8_encode($r);
person Matthew Manela    schedule 01.02.2011
comment
За съжаление id нямаше значение. Но забелязах, че _SERVER[QUERY_STRING] има Unicode стойност. Ще се опита да го извлече от там. - person Yuri; 02.02.2011
comment
След като го извлека от $_SERVER[QUERY_STRING], той превключва на въпросителни знаци. - person Yuri; 02.02.2011
comment
Не мисля, че необработените уникод знаци се поддържат в низове на заявки. Мисля, че ще трябва да ги кодирате в URL адреса. - person Matthew Manela; 02.02.2011
comment
Ако е така, защо $_SERVER[QUERY_STRING] съдържа уникод низ? Мога да го видя, ако поставя phpinfo call на моята страница. - person Yuri; 06.02.2011