[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: strtr($str,$tr);
Xes
Есть функция strtr($str,$tr);
Не работает с многобайтной кодировкой написано что есть mb_ strt но у мня не работает хотя пхп 5.3.3
Поискал аналог не нашел.
ЕСть str_replace -- Заменяет строку поиска на строку замены но это не то.
Неудобно два масива создавать.
Функция нужна для транслита, может что упустил?



Спустя 36 минут, 7 секунд (26.10.2011 - 17:37) m4a1fox написал(а):
Xes
Ну если для транслита то ИМХО через массив красивее будет!

Спустя 1 минута, 51 секунда (26.10.2011 - 17:39) walerus написал(а):
А что собственно требуется сделать, пример кинул бы хоть...

Спустя 25 секунд (26.10.2011 - 17:40) Игорь_Vasinsky написал(а):
ой пардон.. блин.. где то валялась на str_replace(), найти не могу.. заного писать лень.

Спустя 27 секунд (26.10.2011 - 17:40) m4a1fox написал(а):
Ну вроде как я понял перевести кириллицу в латиницу для использованию ее в качестве кусочка url....

Спустя 33 секунды (26.10.2011 - 17:41) m4a1fox написал(а):
Игорь_Vasinsky
Заготовочка?

Спустя 2 минуты, 33 секунды (26.10.2011 - 17:43) Игорь_Vasinsky написал(а):
нашёл на просторах рунета..., но эт через жо**, 2 массива - красивей и ресусоёмче.

<?php 
if (isset($txt))
{
$txt = StrToLower($txt);
if ($tr==='ru')
{
$txt = str_replace('а','a',$txt);
$txt = str_replace('б','b',$txt);
$txt = str_replace('в','v',$txt);
$txt = str_replace('г','g',$txt);
$txt = str_replace('д','d',$txt);
$txt = str_replace('е','e',$txt);
$txt = str_replace('ж','zh',$txt);
$txt = str_replace('з','z',$txt);
$txt = str_replace('и','i',$txt);
$txt = str_replace('й','j',$txt);
$txt = str_replace('к','k',$txt);
$txt = str_replace('л','l',$txt);
$txt = str_replace('м','m',$txt);
$txt = str_replace('н','n',$txt);
$txt = str_replace('о','o',$txt);
$txt = str_replace('п','p',$txt);
$txt = str_replace('р','r',$txt);
$txt = str_replace('с','s',$txt);
$txt = str_replace('т','t',$txt);
$txt = str_replace('у','u',$txt);
$txt = str_replace('ф','f',$txt);
$txt = str_replace('х','h',$txt);
$txt = str_replace('ц','c',$txt);
$txt = str_replace('ч','ch',$txt);
$txt = str_replace('ш','sh',$txt);
$txt = str_replace('щ','sch',$txt);
$txt = str_replace('ъ','\'',$txt);
$txt = str_replace('ы','y',$txt);
$txt = str_replace('ь','\'',$txt);
$txt = str_replace('э',']',$txt);
$txt = str_replace('ю','yu',$txt);
$txt = str_replace('я','ya',$txt);
}
if ($tr==='eng')
{
$txt = str_replace('sch','щ',$txt);
$txt = str_replace('yu','ю',$txt);
$txt = str_replace('ya','я',$txt);
$txt = str_replace('ch','ч',$txt);
$txt = str_replace('sh','ш',$txt);
$txt = str_replace('a','а',$txt);
$txt = str_replace('b','б',$txt);
$txt = str_replace('v','в',$txt);
$txt = str_replace('g','г',$txt);
$txt = str_replace('d','д',$txt);
$txt = str_replace('e','е',$txt);
$txt = str_replace('zh','ж',$txt);
$txt = str_replace('z','з',$txt);
$txt = str_replace('i','и',$txt);
$txt = str_replace('j','й',$txt);
$txt = str_replace('k','к',$txt);
$txt = str_replace('l','л',$txt);
$txt = str_replace('m','м',$txt);
$txt = str_replace('n','н',$txt);
$txt = str_replace('o','о',$txt);
$txt = str_replace('p','п',$txt);
$txt = str_replace('r','р',$txt);
$txt = str_replace('s','с',$txt);
$txt = str_replace('t','т',$txt);
$txt = str_replace('u','у',$txt);
$txt = str_replace('f','ф',$txt);
$txt = str_replace('h','х',$txt);
$txt = str_replace('c','ц',$txt);
$txt = str_replace('\'','ъ',$txt);
$txt = str_replace('y','ы',$txt);
$txt = str_replace('\'','ь',$txt);
$txt = str_replace(']','э',$txt);
}
echo 'Результат: <br><b>'.$txt;
}
?>

Спустя 6 минут, 18 секунд (26.10.2011 - 17:49) m4a1fox написал(а):
Игорь_Vasinsky
Прикольно! smile.gif

Спустя 6 минут, 21 секунда (26.10.2011 - 17:56) walerus написал(а):
У меня веселее B)
class Translit {
static $cyr=array(
"Щ", "Ш", "Ч", "Ц","Ю", "Я", "Ж", "А","Б","В","Г","Д","Е","Ё","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ь","Ы","Ъ","Э","Є","Ї",
"щ", "ш", "ч", "ц","ю", "я", "ж", "а","б","в","г","д","е","ё","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х", "ь","ы","ъ","э","є","ї");
static $lat=array(
"Shh","Sh","Ch","C","Ju","Ja","Zh","A","B","V","G","D","Je","Jo","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","Kh","'","Y","`","E","Je","Ji",
"shh","sh","ch","c","ju","ja","zh","a","b","v","g","d","je","jo","z","i","j","k","l","m","n","o","p","r","s","t","u","f","kh","'","y","`","e","je","ji"
);

static function Transliterate($str, $encIn, $encOut)
{
$str = iconv($encIn, "UTF-8//IGNORE", $str);
for($i=0; $i<count(self::$cyr); $i++){
$c_cyr = self::$cyr[$i];
$c_lat = self::$lat[$i];
$str = str_replace($c_cyr, $c_lat, $str);
}
$str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $str);
$str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}'", $str);
$str = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $str);
$str = preg_replace("/^kh/", "h", $str);
$str = preg_replace("/^Kh/", "H", $str);

return iconv("UTF-8//IGNORE", $encOut, $str);
}
}


$str = 'Валерка';
$text = trim(Translit::Transliterate($str, "UTF-8//IGNORE", "windows-1251"));

// Valerka

Спустя 1 минута, 57 секунд (26.10.2011 - 17:58) m4a1fox написал(а):
Давайте меряться :D?


function generate_url(title, link){
var h1 = document.getElementById('title').value;
var r_trans = new Array(
"А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М",
"Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Э",
"Ю","Я","Ъ","Ы","Ь",
"а","б","в","г","д","е","ё","ж","з","и","й","к","л","м",
"н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","э",
"ю","я","ъ","ы","ь"," ",",","-","(",")",".","?","!",":");

var e_trans = new 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","ch","sh","sch",
"e","yu","ya","","i","",
"a","b","v","g","d","e","e","j","z","i","i","k","l","m",
"n","o","p","r","s","t","u","f","h","c","ch","sh","sch",
"e","yu","ya","","i","","_","_","_","_","_","_","","","_");
returned='';
var word = new Array();
var o=0;
for(var i=0;i<h1.length;i++){
o++;
word[i] = h1.substring(i,o);

for(var y=0;y<e_trans.length;y++){
if(word[i] == r_trans[y]){ returned += word[i].replace(r_trans[y],e_trans[y]); var orly = true; }
}
//Выбор правильной замены
if(orly == true){ orly='';}else{ returned += word[i]; orly=''; }
}
//Цикл разбиения слова на буквы
document.getElementById('link').value = returned;
}


......
title
<input type="text" name="title" id="title" />
<br />

link:
<input readonly="readonly" type="text" name="link" id="link" onkeyup="generate_url()" />
......

Спустя 2 минуты, 36 секунд (26.10.2011 - 18:00) walerus написал(а):
m4a1fox laugh.gif

Спустя 5 минут, 4 секунды (26.10.2011 - 18:05) walerus написал(а):
Исчо одна, по типу - Игорь_Vasinsky

function transliteLat($text){
$lat=Array('a','b','v','g','d','e','yo','zh','z','i','y','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','jj','yi','j','ye','yu',
'ya','A','B','V','G','D','E','Yo','Zh','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','C','Ch','Sh','Sch','jj','Yi','j','Ye',
'Yu','Ya','-','-','-','-','-','-','-','-','-','','','','','','','','','','','','','','','');
$rus=Array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','А','Б',
'В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я',' ','\n',' ',
'.',',','!','?',':',';','«','»','\'','"',')','(','*','%','$','#','\\','/','>','<','&');
$textlat=str_replace($rus,$lat,$text);
return $textlat;
}

:rolleyes:

Спустя 3 минуты, 11 секунд (26.10.2011 - 18:09) m4a1fox написал(а):
Можно мне похвастаться? rolleyes.gif А у меня через js работает! Сразу создает ссылку! rolleyes.gif

Спустя 1 час, 23 минуты, 38 секунд (26.10.2011 - 19:32) Xes написал(а):
НУ у меня как бы все готовы было просто возникла проблема что например кавычки "красивые" типа "<" ">" которые у меня встречаются рубили всю работу.
strst не может с ними работать.
Так как конкретно сейчас стоит задача только для юрл транслит сделал, то добавил просто строчку удаляющею все символы кроме допустимых. А уже потом в транслит перевожу.

Хотелось бы всеже чтобы mb_strst существовала, но увы. Кстати почему ее нет в документации на инглише (первые строки яндекса) она есть в пхп с 5.2v

//Транслит текста
function translitText($str){
$tr = array(
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ъ' => '', 'ы' => 'i', 'ь' => '',
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
'Ё' => 'Yo', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K',
'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'Ts',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Shch', 'Ъ' => '', 'Ы' => 'I', 'Ь' => '',
'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya');
return strtr($str,$tr);
}
//Транслит текста для URL
function translitToURL($str){
$str = preg_replace('/[^\w\sА-Яа-яЁё-]/u', '',$str);
$str =translitText($str);
$tr = array(' '=> '-');
$str = strtr($str,$tr);
$str = trim(mb_strtolower($str));
$str = preg_replace('/[^a-z\d-]/u', '',$str);
$str = preg_replace('#[-]+#u', '-', $str);
return $str;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.