За последние 24 часа нас посетили 16600 программистов и 1582 робота. Сейчас ищут 1811 программистов ...

Транслитерация в UTF-8

Тема в разделе "PHP для новичков", создана пользователем padovan, 2 дек 2009.

  1. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте!

    У меня в php.ini : default_charset = "utf-8"
    Страницы вывожу с: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    При использовании функции :
    PHP:
    1. <?php
    2.  
    3. // функция превода текста с кириллицы в траскрипт
    4.  
    5.   function encodestring($st)
    6.  
    7.   {
    8.  
    9.     // Сначала заменяем "односимвольные" фонемы.
    10.  
    11.     $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
    12.  
    13.     "abvgdeeziyklmnoprstufh'iei");
    14.  
    15.     $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
    16.  
    17.     "ABVGDEEZIYKLMNOPRSTUFH'IEI");
    18.  
    19.     // Затем - "многосимвольные".
    20.  
    21.     $st=strtr($st,
    22.  
    23.                     array(
    24.  
    25.                         "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
    26.  
    27.                         "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
    28.  
    29.                         "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
    30.  
    31.                         "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
    32.  
    33.                         "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
    34.  
    35.                         )
    36.  
    37.              );
    38.  
    39.     // Возвращаем результат.
    40.  
    41.     return $st;
    42.  
    43.   }
    44.  
    45. ?>
    Сам файл с функцией в UTF-8

    При переводе "ИвановИП", получаю "ESeeebe�e�eeEE". Как быть?
    [/php]
     
  2. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    В какой кодировке сохранен сам скрипт?

    Приходит ли от сервера заголовок "Content-Type:" ? что в нем написано?
     
  3. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Скрипт в UTF-8.

    В браузере клиента :
    HTML:
    1.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    2.   <meta name="author" content="FireHead Group">
    3.   <title>Active Directory Web Interface</title>
    4. </head>
     
  4. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    Вставь в начало скрипта который выводит перевод(его тоже надо сохранить в utf-8):
    header("Content-Type: text/html; charset=utf-8");

    Если не поможет то надо смотреть какой заголовок приходит с сервера (например c помощью плагина для FF HTTP Live headers ). Возможно хостер прикручивает свой заголовок с кодировкой или перекодирует страницу перед выдачей.
     
  5. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Header:

    POST /ad/?module=user&form=new&action=create HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
    Referer: http://localhost:82/ad/?module=user&form=new
    Accept-Language: ru
    Content-Type: application/x-www-form-urlencoded
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
    Host: localhost:82
    Content-Length: 174
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: PHPSESSID=pbq82dkj6b6oocqmr4ccmeptp3
     
  6. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    Так тебе строка
    header("Content-Type: text/html; charset=utf-8");
    не помогла?

    Это ты выложил заголовки которые ты посылаешь серверу, надо посмотреть те, которые он высылает тебе
    Там обычно в первой строке должно присутствовать 200 OK
     
  7. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Ага не то вставил.

    Вот что от сервера:

    HTTP/1.1 200 OK
    Date: Wed, 02 Dec 2009 10:45:53 GMT
    Server: Apache/2.2.6 (Win32) PHP/5.2.10
    X-Powered-By: PHP/5.2.10
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 3252
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=utf-8
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ну для начала почитать описание strtr, а потом спросить себя - а сколько же символов в понятиях PHP, который не поддерживает нативно UTF-8, занимает одна русская буква в кодировке UTF-8.
     
  9. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Спасибо. Ты прав.

    Решение тут: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=53318
     
  10. padovan

    padovan Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    13
    Симпатии:
    0
    Phantik, MiksIr спасибо за помощь.