Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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($nameMB_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 Яндекс.Метрика Яндекс цитирования