Проблема с функцией перевода текста с кириллицы в транслит

12
Braindbrigada
На сайте с 10.01.2010
Offline
84
1872

После перевода сайта с 1251 в utf-8 появилась проблема с функцией перевода текста с кириллицы в транслит.

При создание PHP скриптом URL'a, он получаются из кракобязов.

Нужен совет, что можно стелать?

Пример: Вместо "воровка" - "vorovka", получается "воровка" - "eeeѕmЂeѕeeeheb"

DriverCat
На сайте с 10.04.2008
Offline
116
#1
Braindbrigada:
После перевода сайта с 1251 в utf-8 появилась проблема с функцией перевода текста с кириллицы в транслит.

При создание PHP скриптом URL'a, он получаются из кракобязов.

Нужен совет, что можно стелать?

Пример: Вместо "воровка" - "vorovka", получается "воровка" - "eeeѕmЂeѕeeeheb"

а как именно вы переводите в транслит?

n0name
На сайте с 22.12.2006
Offline
54
#2

Проблема в функции перевода. Она по прежнему работает с текстом, как будто он в cp1251.

Можете показать эту функцию?

Сервис сравнения цена на VPS (http://vpska.com/)
Braindbrigada
На сайте с 10.01.2010
Offline
84
#3

// функция перевода текста с кириллицы в траслит


function translit($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;

}

Вот такая вот функция...

C
На сайте с 04.02.2005
Offline
291
#4

kandidat cms

а... не попробовали перекодировать addcat.php в utf8 кодировку?

Braindbrigada
На сайте с 10.01.2010
Offline
84
#5
Chukcha:
kandidat cms

Да...:)

Chukcha:
а... не попробовали перекодировать addcat.php в utf8 кодировку?

Первым делом...:)

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#6

Ну ессесно т.к. гавно функция.

Файл переведите в utf8 и вставьте вместо старой вот эту:


function translit($st)
{
$st = mb_strtolower($st, "utf-8");
$st = str_replace(array(
'?','!','.',',',':',';','*','(',')','{','}','[',']','%','#','№','@','$','^','-','+','/','\\','=','|','"','\'',
'а','б','в','г','д','е','ё','з','и','й','к',
'л','м','н','о','п','р','с','т','у','ф','х',
'ъ','ы','э',' ','ж','ц','ч','ш','щ','ь','ю','я'
), array(
'_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_','_',
'a','b','v','g','d','e','e','z','i','y','k',
'l','m','n','o','p','r','s','t','u','f','h',
'j','i','e','_','zh','ts','ch','sh','shch',
'','yu','ya'
), $st);
$st = preg_replace("/[^a-z0-9_]/", "", $st);
$st = trim($st, '_');

$prev_st = '';
do
{
$prev_st = $st;
$st = preg_replace("/_[a-z0-9]_/", "_", $st);
}
while($st != $prev_st);

$st = preg_replace("/_{2,}/", "_", $st);
return $st;
}
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
C
На сайте с 04.02.2005
Offline
291
#7

попробуйте


function mb_strtr($inputStr, $from, $to, $encoding = 'UTF-8') {
$inputStrLength = mb_strlen($inputStr, $encoding);
$translated = '';
for($i = 0; $i < $inputStrLength; $i++) {
$currentChar = mb_substr($inputStr, $i, 1, $encoding);
$translatedCharPos = mb_strpos($from, $currentChar, 0, $encoding);
if($translatedCharPos === false) {
$translated .= $currentChar;
}
else {
$translated .= mb_substr($to, $translatedCharPos, 1, $encoding);
}
}
return $translated;
}
Braindbrigada
На сайте с 10.01.2010
Offline
84
#8

LEOnidUKG, спасибо все заработало... :)

Chukcha, тоже спасибо... :)

n0name
На сайте с 22.12.2006
Offline
54
#9
LEOnidUKG:


$prev_st = '';
do
{
$prev_st = $st;
$st = preg_replace("/_[a-z0-9]_/", "_", $st);
}
while($st != $prev_st);
}

Этот код лишний. Зачем удалять одиночные буквы?

reporter_v_moskve лучше смотрится, чем reporter_moskve

temmokan
На сайте с 18.08.2008
Offline
131
#10

Просто к слову - а использовать функцию iconv() взамен написания её своими руками не надёжнее?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий