Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Транслит на utf-8
 
 автор: Front   (13.05.2008 в 14:46)   письмо автору
 
 

Всем доброго дня! Помогите со следующим вопросом. Недавно перевел apache и mysql на utf-8. Перестала работать функция взятая с softtime:

echo "<form action='index.php' method='post'>";
        echo "<td>Логин (кириллица):</td>";
        echo "<td><input type='text' name='login' size='30' class='form'></td>";
        echo "<td><input type='submit' class='form' value='GENERATE'></td>";
echo "</form>";

if (!empty($_POST['login']))
        {
            echo $st = encodestring($_POST[login]);            
        }

  function encodestring($st)
  {
    // Сначала заменяем "односимвольные" фонемы.
    $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
    "abvgdeeziyklmnoprstufh'iei");
    $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
    "ABVGDEEZIYKLMNOPRSTUFH'IEI");
    // Затем - "многосимвольные".
    $st=strtr($st, 
                    array(
                        "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 
                        "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
                        "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 
                        "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
                        "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
                        )
             );
             
    // Возвращаем результат.
    return $st;
  }


Получаю на выходе кракозябли. Может знает кто в чем проблема?
Спасибо

   
 
 автор: Usta   (13.05.2008 в 15:06)   письмо автору
 
   для: Front   (13.05.2008 в 14:46)
 

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> ставить пробовали??

   
 
 автор: KPETuH   (14.05.2008 в 06:22)   письмо автору
 
   для: Usta   (13.05.2008 в 15:06)
 

><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> ставить пробовали??

лучше попробуйте <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> и проверьте в какой кодировке сохранен сам php файл

   
 
 автор: Front   (14.05.2008 в 09:17)   письмо автору
 
   для: KPETuH   (14.05.2008 в 06:22)
 

Не совсем понятно зачем ставить
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

если кодировка utf-8? Но так тоже не работает.
Пробовал переводить utf-8 в cp1251, затем вызавал функцию encodestring, а результат этой функции переводил обратно в utf-8, в результате на выходе получается тоже что и вводил т.е. ввожу ИВАНОВ на выходе => ИВАНОВ!

делал так:

            $st = iconv("utf-8","cp1251",$_POST[login]);
            $st = encodestring($st);            
            $st = iconv("cp1251","utf-8",$st);


Кодировку проверял, файл сохранен в utf-8!

   
 
 автор: KPETuH   (14.05.2008 в 09:26)   письмо автору
 
   для: Front   (14.05.2008 в 09:17)
 

>Не совсем понятно зачем ставить
>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

>если кодировка utf-8? Но так тоже не работает.
затем что браузер не знает в какой у вас кодировке и ему указать нужно...

   
 
 автор: KPETuH   (14.05.2008 в 09:46)   письмо автору
 
   для: KPETuH   (14.05.2008 в 09:26)
 

возможно проблема в том что utf-8 многобайтная кодировка, попробуйте использовать регулярные выражения

   
 
 автор: KPETuH   (14.05.2008 в 10:20)   письмо автору
 
   для: Front   (14.05.2008 в 09:17)
 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
echo "<form action='wert.php' method='post'>";
echo 
"<td>Кирилица:</td>";
echo 
"<td><input type='text' name='login' size='30' class='form'></td>";
echo 
"<td><input type='submit' class='form' value='GENERATE'></td>";
echo 
"</form>";
if (!empty(
$_POST))
        {
            echo 
$_POST['login'];
            echo 
$st encodestring($_POST['login']);
        }
  function 
encodestring($string)
  {
    
$table = array(
                
'А' => 'A',
                
'Б' => 'B',
                
'В' => 'V',
                
'Г' => 'G',
                
'Д' => 'D',
                
'Е' => 'E',
                
'Ё' => 'YO',
                
'Ж' => 'ZH',
                
'З' => 'Z',
                
'И' => 'I',
                
'Й' => 'J',
                
'К' => 'K',
                
'Л' => 'L',
                
'М' => 'M',
                
'М' => 'N',
                
'О' => 'O',
                
'П' => 'P',
                
'Р' => 'R',
                
'С' => 'S',
                
'Т' => 'T',
                
'У' => 'U',
                
'Ф' => 'F',
                
'Х' => 'H',
                
'Ц' => 'C',
                
'Ч' => 'CH',
                
'Ш' => 'SH',
                
'Щ' => 'CSH',
                
'Ь' => '',
                
'Ы' => 'Y',
                
'Ъ' => '',
                
'Э' => 'E',
                
'Ю' => 'YU',
                
'Я' => 'YA',

                
'а' => 'a',
                
'б' => 'b',
                
'в' => 'v',
                
'г' => 'g',
                
'д' => 'd',
                
'е' => 'e',
                
'ё' => 'yo',
                
'ж' => 'zh',
                
'з' => 'z',
                
'и' => 'i',
                
'й' => 'j',
                
'к' => 'k',
                
'л' => 'l',
                
'м' => 'm',
                
'н' => 'n',
                
'о' => 'o',
                
'п' => 'p',
                
'р' => 'r',
                
'с' => 's',
                
'т' => 't',
                
'у' => 'u',
                
'ф' => 'f',
                
'х' => 'h',
                
'ц' => 'c',
                
'ч' => 'ch',
                
'ш' => 'sh',
                
'щ' => 'csh',
                
'ь' => '',
                
'ы' => 'y',
                
'ъ' => '',
                
'э' => 'e',
                
'ю' => 'yu',
                
'я' => 'ya',
    );

    
$output str_replace(
        
array_keys($table),
        
array_values($table),$string
    
);

    return 
$output;
}

?>
</body>
</html>

   
 
 автор: Front   (14.05.2008 в 11:21)   письмо автору
 
   для: KPETuH   (14.05.2008 в 10:20)
 

Вставил вашу функцию, еще раз пересохранил в utf и заработало! Спасибо большое. Тема закрыта.

   
 
 автор: pav4   (29.08.2008 в 15:05)   письмо автору
 
   для: Front   (14.05.2008 в 11:21)
 

люди почему если текст котрый нужно транслировать получен из post то транслит не получатся, а если просто $text="текст для трансляции"; то все ок.


$text=$_FILES['test']['name'];
$dlina = strlen($text); 
echo "$text<br>"; 

        $r_trans = array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м", 
                        "н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","э", 
                        "ю","я","ъ","ы","ь"); 
        $e_trans = array("a","b","v","g","d","e","e","j","z","i","i","k","l","m", 
                        "n","o","p","r","s","t","u","f","h","c","4","sh","s4", 
                        "e","yu","ya","'","i","'"); 
for ($i=0;$i<$dlina;$i++) 

        $text = str_replace($r_trans, $e_trans, $text); 


echo $text."<br>";

   
 
 автор: mihdan   (30.08.2008 в 02:06)   письмо автору
 
   для: pav4   (29.08.2008 в 15:05)
 

>если текст котрый нужно транслировать получен из post то транслит не получатся
а в какой кодтровке у вас приходят ПОСТ-данные??? Подумайте...

   
 
 автор: pav4   (30.08.2008 в 08:22)   письмо автору
 
   для: mihdan   (30.08.2008 в 02:06)
 

у меня так:
setlocale(LC_CTYPE, array ('ru_RU.UTF-8'));
как бы проверить какая кодировка?

   
 
 автор: pav4   (01.09.2008 в 07:32)   письмо автору
 
   для: pav4   (30.08.2008 в 08:22)
 

up

   
 
 автор: BinLaden   (19.11.2008 в 23:09)   письмо автору
 
   для: Front   (14.05.2008 в 11:21)
 

> и заработало!

Это ненадолго:)

   
 
 автор: lorenberg   (19.11.2008 в 22:23)   письмо автору
 
   для: KPETuH   (14.05.2008 в 10:20)
 

'М' => 'N',


опечатка

   
 
 автор: AW   (01.12.2008 в 19:17)   письмо автору
 
   для: lorenberg   (19.11.2008 в 22:23)
 

Можно ли переделать данный скрипт, добавив парочку функций? Как его заставить открывать файлы с определённым расширением, находящиеся в том же каталоге, что и он сам, и далее вниз по подкаталогам?
Скрипт открывает файл с определённым расширением ==> транслит ==> запись в файл ==> работа со следующим файлом, если нет больше файлов в данном каталоге, переходим в подкаталог. Скрип заканчивает свою работу после того, как были прочитаны все файлы. Результат можно записать в отдельную папку, или сделать перезапись существующего...
Подскажите пожалуйста как это можно реализовать =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования