Всем привет.. Возникла необходимость сделать поиск на своем сайте на чужой.. т.е вводим у нас например "шорты" он переводит на китайский, прогоняет через urlencode и редиректит подствляя результат в гет. ПРоблема в том, что urlencode возвращает не правильный результат.... Есть 2 варианта их кодировать из utf-8 и из gb2312 Мне нужен второй, хотя если и первый сделает верно тоже думаю можно... PHP: $value=iconv("windows-1251", "UTF-8", $_POST['text']); // То, что вы хотите перевести $appid="F0F6345C7A5063103E0693B1CBA6CE231CEF5BA7"; // AppID от Бинга, который вы получили после регистрации $from="ru"; // С какого языка будем переводить $to="zh-CHS"; // На какой $result=file_get_contents("http://api.microsofttranslator.com/V2/Ajax.svc/Translate?appId=".$appid."&from=".$from."&to=". $to."&text=".urlencode($value)); $result = str_replace("\"","",$result); echo $result; // получили иероглифы, правильные все норм. echo mb_detect_encoding($result); // говорит в кодировке UTF-8 echo mb_convert_encoding($result, 'utf-8', 'gb2312'); // Попытка переконвертировать так, выводит пустой результат $result = iconv('UTF-8', 'gb2312',$result); echo $result ; // А вот так показывает иероглифы норм echo mb_detect_encoding($result); // Но вот тут нам говорят что кодировочка то не GB2312 , а ANCII !!! echo urlencode($result); // и скорее всего из-за ANCII тут пусто. //А вот если сделать так: $result = iconv('UTF-8', 'gb2312','情侣'); // т.е передать иероглиф прямо текстом echo urlencode($result); // то получим правильный урл енкоде. ПОЧЕМУ? (( Вот код, подписал сложные моменты, где не работает.. Уже 3 дня пытаюсь.. Может чего в пхп не хватает?
Для перекодировки из UTF-8 в GB2312: PHP: mb_convert_encoding($result, 'gb2312', 'utf-8'); Хотя, скорее всего, нужно юзать не GB2312, а EUC-CN
Не, кодировка верная. Я долго искал, и уже начал лазить на китайских сайтах, и нашел статьи там на эту тему... Проблема была еще в том, что после урленкода, к нормальному переводу впереди подставлялось "%FE%FF" т.е юя откуда они берутся я понятия не имею, убрал их стр_реплейсом и все.
Уточнил. GB2312 — это алиас для EUC-CN. Вы мой пост-то хоть поняли? У вас в вызове mb_convert_encoding() переставлены местами 2-й и 3-й параметр. В упор не вижу этих символов: PHP: <?php $str = array ( '这个是东西多钱', '这双很合适,这是真皮的吗?', '请您试试这双', '我给了你九百块,你还要找我三十一块八毛,对吗?', '这双太紧,你们有大些的吗?' ); foreach ($str as $line) echo urlencode (iconv ('UTF-8', 'gb2312', $line)), "\n"; echo "\n"; foreach ($str as $line) echo urlencode (mb_convert_encoding ($line, 'gb2312', 'UTF-8')), "\n"; ?> Не в urlencode дело.
-=Zhenek=- потому что вы читаете из файла, видимо, во всяком случае это BOM метка от utf http://ru.wikipedia.org/wiki/BOM
Да, смотрите репу. Действительно перепутал, но дело было в бом. Я писал, если делать как вы, все норм, а если получать, то проблема. Точно, не подумал. Не с файла, а с переводчика Бинг от мелкомягких... Даже не ожидал, что они будут передавать перевод с бом((((