кирилица и get запрос

Тема в разделе "PHP", создана пользователем pepeh, 14 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. pepeh

    pepeh Создатель

    Регистр.:
    24 май 2008
    Сообщения:
    43
    Симпатии:
    1
    в Гугле есть такой сервис где можно переводить через get запрос:
    http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=hello&langpair=en|ru

    Есть проблема что если в запросе написать кириллицу ничего не переводится, но сервис поддерживает перевод

    Например вместо
    langpair=en|ru
    написать
    langpair=ru|en
    и вместо
    q=hello
    написать
    q=привет

    получится q=%EF%F0%E8%E2%E5%F2

    у меня есть скрипт который переводит через эту страницу текст, а очень большой минус что есть проблемы с кириллицей. Думаю если вы найдете решение это очень всем поможет, потому что можно будет делать переводы через php и каждый сможет иметь на сайте свой собственный переводчик

    адрес скрипта http://code.google.com/p/gtranslate-api-php/
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    PHP:
    $url 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='urlencodeiconv('windows-1251'"UTF-8""привет") ) .'&langpair=ru|en'
    print_rfile_get_contents($url));
     
  3. blizz123

    blizz123 Читатель

    Заблокирован
    Регистр.:
    25 апр 2010
    Сообщения:
    99
    Симпатии:
    17
    PHP:
    function utf8_convert($str$type)
    {
       static 
    $conv '';
       if (!
    is_array($conv))
       {
          
    $conv = array();
          for (
    $x=128$x <= 143$x++)
          {
             
    $conv['utf'][] = chr(209) . chr($x);
             
    $conv['win'][] = chr($x 112);
          }
          for (
    $x=144$x<= 191$x++)
          {
             
    $conv['utf'][] = chr(208) . chr($x);
             
    $conv['win'][] = chr($x 48);
          }
          
    $conv['utf'][] = chr(208) . chr(129);
          
    $conv['win'][] = chr(168);
          
    $conv['utf'][] = chr(209) . chr(145);
          
    $conv['win'][] = chr(184);
       }
       if (
    $type == 'w')
       {
          return 
    str_replace($conv['utf'], $conv['win'], $str);
       }
       elseif (
    $type == 'u')
       {
          return 
    str_replace($conv['win'], $conv['utf'], $str);
       }
       else
       {
          return 
    $str;
       }
    }
    $type равно либо 'w', либо 'u' в зависимости от направления кодирования
     
  4. pepeh

    pepeh Создатель

    Регистр.:
    24 май 2008
    Сообщения:
    43
    Симпатии:
    1
    Спасибо твое работает
     
  5. AdMeen

    AdMeen Создатель

    Регистр.:
    19 май 2010
    Сообщения:
    13
    Симпатии:
    0
    видимо всё таки chang дал оптимальный вариант решения
     
  6. pepeh

    pepeh Создатель

    Регистр.:
    24 май 2008
    Сообщения:
    43
    Симпатии:
    1
    Есть еще одна пробелема ... масимум текста может быть 372 символа (вместо слова "привет" можно написать макс. 372 символа)


    Как сделать так чтобы оно подавало запросы в цикле например ищет последнее слово которое вместе с текстом не более 360 символов???? :nezn:

    мне нужно выполнить этот кусок кода в цикле,
    PHP:
    $text $gt->en_to_ru($text);
    (например чтобы создавало массив с кусками текста затем объединило элементы массива в одну переменную $text)
    но чтобы этой функцией не обрезались слова
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Не обрезать слова мало, нужно еще и фразы не разбивать...
     
  8. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    делит по словам/предложениям и вып. перевод в цикле
    PHP:
    // по словам до 360 символов
    if(strlen($text)>372) { #если символов > max
    $s_text=wordwrap($text,360,'|delimiter|'); $s_arr=explode('|delimiter|',$s_text); #разделяет по словам
    foreach ($s_arr as $value$text_2 .= $gt->en_to_ru($value).' '# перевод в цикле
    $text $text_2; }
    else { 
    $text $gt->en_to_ru($text); }
    PHP:
    // по предложениям(точкам и \n) до 360 символов
    if(strlen($text)>372) { 
    preg_match_all("/.{1,360}(\.\s|\n)/s",$text,$s_res); $s_arr=$s_res[0]; #разделяет по предложениям
    foreach ($s_arr as $value$text_2 .= $gt->en_to_ru($value).' '
    $text $text_2; }
    else { 
    $text $gt->en_to_ru($text); }
     
  9. pepeh

    pepeh Создатель

    Регистр.:
    24 май 2008
    Сообщения:
    43
    Симпатии:
    1
    код обрезает последнее предложение. Как исправить?
     
  10. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    if(strlen($text)>372) {
    $text .= "\n";
    preg_match_all("/.{1,360}(\.\s|\n)/s",$text,$s_res); $s_arr=$s_res[0]; #разделяет по предложениям
    foreach ($s_arr as $value$text_2 .= $gt->en_to_ru($value).' '
    $text $text_2; }
    else { 
    $text $gt->en_to_ru($text); }  
     
    pepeh нравится это.
Статус темы:
Закрыта.