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

Форум PHP

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

 

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

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

тема: Транслит в чем грабли (есть пример)
 
 автор: Sywooch   (26.07.2007 в 16:42)   письмо автору
 
 

Доброго времени суток.
Есть скрипт которые работает с чпу которые берется из названия статьи через функцию транслита!

Функция:

<?php
function TranslitName($string)
  {
   
$slash = "";
   static 
$LettersFrom = "абвгдезиклмнопрстуфыэйхё";
   static 
$LettersTo   = "abvgdeziklmnoprstufyejhe";
   static 
$Consonant = "бвгджзйклмнпрстфхцчшщ";
   static 
$Vowel = "аеёиоуыэюя";
   static 
$BiLetters = array( 
     
"ж" => "zh", "ц"=>"ts", "ч" => "ch", 
     
"ш" => "sh", "щ" => "sch", "ю" => "ju", "я" => "ja",
   );
   
$string = preg_replace("/[_\s\.,?!\[\](){}]+/", "_", $string);
   
$string = preg_replace("/-{2,}/", "--", $string);
   
$string = preg_replace("/_-+_/", "--", $string);
   
$string = preg_replace("/[_\-]+$/", "", $string);   
   
$string = strtolower( $string );
   
//here we replace ъ/ь 
   
$string = preg_replace("/(ь|ъ)([".$Vowel."])/", "j\\2", $string);
   
$string = preg_replace("/(ь|ъ)/", "", $string);
   
//transliterating
   
$string = strtr($string, $LettersFrom, $LettersTo );
   
$string = strtr($string, $BiLetters );
   
$string = preg_replace("/j{2,}/", "j", $string);
   
$string = preg_replace("/[^".$slash."0-9a-z_\-]+/", "", $string);
   return 
$string;
  }
?>


Дома на денвере работает на ура! Но после того как залил на хост функция вместо русских букв возвращает пустоту и все.....
Латиница и цифры проходят

В чем грабли?

   
 
 автор: Trianon   (26.07.2007 в 16:45)   письмо автору
 
   для: Sywooch   (26.07.2007 в 16:42)
 

какая кодировка у файла?

   
 
 автор: Sywooch   (26.07.2007 в 16:51)   письмо автору
 
   для: Trianon   (26.07.2007 в 16:45)
 

Вот этого я не знаю :)
Все пишу в PSPad

Запустите пожалуйста у себя если можно:

<?
function TranslitName($string)
  {
   
$slash = "";
   static 
$LettersFrom = "абвгдезиклмнопрстуфыэйхё";
   static 
$LettersTo   = "abvgdeziklmnoprstufyejhe";
   static 
$Consonant = "бвгджзйклмнпрстфхцчшщ";
   static 
$Vowel = "аеёиоуыэюя";
   static 
$BiLetters = array( 
     
"ж" => "zh", "ц"=>"ts", "ч" => "ch", 
     
"ш" => "sh", "щ" => "sch", "ю" => "ju", "я" => "ja",
   );
   
$string = preg_replace("/[_\s\.,?!\[\](){}]+/", "_", $string);
   
$string = preg_replace("/-{2,}/", "--", $string);
   
$string = preg_replace("/_-+_/", "--", $string);
   
$string = preg_replace("/[_\-]+$/", "", $string);   
   
$string = strtolower( $string );
   
//here we replace ъ/ь 
   
$string = preg_replace("/(ь|ъ)([".$Vowel."])/", "j\\2", $string);
   
$string = preg_replace("/(ь|ъ)/", "", $string);
   
//transliterating
   
$string = strtr($string, $LettersFrom, $LettersTo );
   
$string = strtr($string, $BiLetters );
   
$string = preg_replace("/j{2,}/", "j", $string);
   
$string = preg_replace("/[^".$slash."0-9a-z_\-]+/", "", $string);
   return 
$string;
  }

echo 
TranslitName('работает?');
?>


Что вернет интересно :)

   
 
 автор: Sywooch   (26.07.2007 в 17:23)   письмо автору
 
   для: Sywooch   (26.07.2007 в 16:51)
 

Вот нашел скриптик немного доработал, пока работает, что скажете???

<?
function trans($name)
{
$symbs = array
(
"&#224;" => "a","&#225;" => "b","&#226;"
 
=> "v","&#227;" => "g","&#228;" => "d",
"&#229;" => "e","&#184;" => "e",
"&#230;" => "zh","&#231;" => "z","&#232;" 
=> "i","&#233;" => "j","&#234;" => "k",
"&#235;" => "l","&#236;" => "m","&#237;" => 
"n",
"&#238;" => "o","&#239;" => "p","&#240;" => 
"r","&#241;" => "s","&#242;" => "t",
"&#243;" => "u","&#244;" => "f","&#245;" => "h",
"&#246;" => "ts","&#247;" => "ch","&#248;" => "sh","&#249;" => "sch","&#250;" => "",
"&#251;" => "y","&#252;" => "","&#253;" => 
"e",
"&#254;" => "yu","&#255;" => "ya"," " => 
"_","-"=>"_","'"=>"","=" => "","+" => "","%" => "","^" => "",
"&" => "","*" => "",'"' => "","@" => "","$" 
=> "",";" => "",":" => "","`" => "","~" => "");
return 
strtr((mb_convert_case($name, MB_CASE_LOWER, "CP1251")),$symbs);
}
?>

   
 
 автор: Faraon   (26.07.2007 в 17:43)   письмо автору
 
   для: Sywooch   (26.07.2007 в 16:51)
 

Возвращает

rabotaet

   
 
 автор: Sywooch   (26.07.2007 в 18:51)   письмо автору
 
   для: Faraon   (26.07.2007 в 17:43)
 

Скорее всего это был конфликт версий РНР дома рнр4 на хостинге рнр5...

   
 
 автор: Sywooch   (27.07.2007 в 01:50)   письмо автору
 
   для: Sywooch   (26.07.2007 в 18:51)
 

Вот окончательная версия:


<?
  
function TranslitName($content) {
    
$transA = array('А' => 'a', 'Б' => 'b',
 
'В' => 'v', 'Г' => 'h', 'Ґ' => 'g',
 
'Д' => 'd', 'Е' => 'e', 'Ё' => 'jo',
 
'Є' => 'e', 'Ж' => 'zh', 'З' => 'z',
 
'И' => 'i', 'І' => 'i', 'Й' => 'i',
 
'Ї' => 'i', 'К' => 'k', 'Л' => 'l',
 
'М' => 'm', 'Н' => 'n', 'О' => 'o',
 
'П' => 'p', 'Р' => 'r', 'С' => 's',
 
'Т' => 't', 'У' => 'u', 'Ў' => 'u',
 
'Ф' => 'f', 'Х' => 'h', 'Ц' => 'c',
 
'Ч' => 'ch', 'Ш' => 'sh', 'Щ' => 'sz',
 
'Ъ' => '', 'Ы' => 'y', 'Ь' => '',
 
'Э' => 'e', 'Ю' => 'yu', 'Я' => 'ya');
    
$transB = array('а' => 'a', 'б' => 'b',
 
'в' => 'v', 'г' => 'g', 'ґ' => 'g',
 
'д' => 'd', 'е' => 'e', 'ё' => 'jo',
 
'є' => 'e', 'ж' => 'zh', 'з' => 'z',
 
'и' => 'i', 'і' => 'i', 'й' => 'i',
 
'ї' => 'i', 'к' => 'k', 'л' => 'l',
 
'м' => 'm', 'н' => 'n', 'о' => 'o',
 
'п' => 'p', 'р' => 'r', 'с' => 's',
 
'т' => 't', 'у' => 'u', 'ў' => 'u',
 
'ф' => 'f', 'х' => 'h', 'ц' => 'c',
 
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sz',
 
'ъ' => '', 'ы' => 'y', 'ь' => '',
 
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
 
'&quot;' => '', '&amp;' => '',
 
'µ' => 'u', '№' => '');

    
$content = trim(strip_tags($content));
    
$content = strtr($content, $transA);
    
$content = strtr($content, $transB);
    
$content = preg_replace("/\s+/ms", "_", $content);
    
$content = preg_replace("/[ ]+/", "_", $content);
    
$content = preg_replace("/[^a-z0-9_]+/mi", "", $content);

    return 
$content;
}
?>

   
Rambler's Top100
вверх

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