Китайские иероглифы + urlencode

Discussion in 'PHP' started by -=Zhenek=-, 15 Apr 2012.

  1. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Всем привет..
    Возникла необходимость сделать поиск на своем сайте на чужой..
    т.е вводим у нас например "шорты" он переводит на китайский, прогоняет через 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 дня пытаюсь..
    Может чего в пхп не хватает?
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Для перекодировки из UTF-8 в GB2312:
    PHP:
    mb_convert_encoding($result'gb2312''utf-8');
    Хотя, скорее всего, нужно юзать не GB2312, а EUC-CN
     
    #2 krypt3r, 15 Apr 2012
    Last edited: 15 Apr 2012
    1 person likes this.
  3. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Не, кодировка верная.
    Я долго искал, и уже начал лазить на китайских сайтах, и нашел статьи там на эту тему...

    Проблема была еще в том, что после урленкода, к нормальному переводу впереди подставлялось "%FE%FF" т.е юя откуда они берутся я понятия не имею, убрал их стр_реплейсом и все.
     
  4. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Уточнил. 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 дело.
     
    #4 krypt3r, 15 Apr 2012
    Last edited: 15 Apr 2012
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=-
    потому что вы читаете из файла, видимо, во всяком случае это BOM метка от utf

    http://ru.wikipedia.org/wiki/BOM
     
    _________________________
  6. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Да, смотрите репу. Действительно перепутал, но дело было в бом.

    Я писал, если делать как вы, все норм, а если получать, то проблема.

    Точно, не подумал. Не с файла, а с переводчика Бинг от мелкомягких...
    Даже не ожидал, что они будут передавать перевод с бом((((