|
|
|
| Хотелось бы решить одну задачу малой кровью.
Можно ли реализовать след. задачу с помощью preg_replace_callback()?
<?php
//Callback-функция
function translitiration($array)
{
//Какой-то код
return $array[0];
}
//Смешанный текст: то, что нужно транслитировать и то, что НЕ нужно (смайлы)
$string = "translit .smile. translit";
//А можно ли придумать рег. выражение, которое нужное для решения моей задачи?
$string = preg_replace_callback("", "translitiration", $string);
//Должно получится что-то вроде "транслит .smile. транслит"
?>
|
Если точно нельзя, то просьба так и ответить ;) | |
|
|
|
|
|
|
|
для: Unkind
(04.02.2007 в 00:18)
| | Что-то не очень понятна задача. | |
|
|
|
|
|
|
|
для: cheops
(04.02.2007 в 00:23)
| | Ну, допустим, пользователь вводит текст латинскими буквами (на некоторых мобильниках нет ввода кириллицы), а также вставляет смайлы (например, ".smile.").
Далее идет преобразование смайлов. Если я тупо сделаю транcлитерацию, то выйдет ".смиле." и смайл не будет преобразован в <img src='...' alt='...' /> | |
|
|
|
|
|
|
|
для: Unkind
(04.02.2007 в 00:27)
| | >> Если точно нельзя, то просьба так и ответить ;)
А если можно как отвечать? Если нужно было ответить "можно", то дальше не читайте - можно! ;-)
Подойдет обычное "#[a-z\.]+#is ", а в translitiration() смотрим -
первая и последняя "буквы" попавшего слова - точки: значит не транслитируем его.
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(04.02.2007 в 09:06)
| | Хороший вариант, но единственно, если будет translit.smile. (слитно), то не сработает... | |
|
|
|
|
|
|
|
для: Unkind
(04.02.2007 в 13:32)
| | замените этот .smile. каким нибудь [@], переведите все на русский и потом [@] замените на код.. | |
|
|
|
|
|
|
|
для: bronenos
(11.02.2007 в 08:21)
| | Хех, нет уж, пасиба. | |
|
|
|
|
|
|
|
для: Unkind
(15.02.2007 в 01:01)
| | Пришлось лить кровь. :)
<?php
$msg = "translit <img src='/smiles/smile.gif' alt='DO NOT TOUCH ME!' /> translit";
function transliteration($message)
{
$array = array(
"Jo" => "Ё",
"jo" => "ё",
"Yo" => "Ё",
"yo" => "ё",
"Zh" => "Ж",
"zh" => "ж",
"*" => "ж",
"Ch" => "Ч",
"ch" => "ч",
"Sh" => "Ш",
"sh" => "ш",
"Shc" => "Щ",
"shc" => "щ",
"''" => 'ъ',
"'" => "ь",
"Ye" => "Э",
"ye" => "э",
"Yu" => "Ю",
"yu" => "ю",
"Ya" => "Я",
"ya" => "я",
"X" => "Ы",
"x" => "ы",
"A" => "А",
"a" => "а",
"B" => "Б",
"b" => "б",
"C" => "Ц",
"c" => "ц",
"D" => "Д",
"d" => "д",
"E" => "Е",
"e" => "е",
"F" => "Ф",
"f" => "ф",
"G" => "Г",
"g" => "г",
"H" => "Х",
"h" => "х",
"I" => "И",
"i" => "и",
"K" => "К",
"k" => "к",
"L" => "Л",
"l" => "л",
"M" => "М",
"m" => "м",
"N" => "Н",
"n" => "н",
"O" => "О",
"o" => "о",
"P" => "П",
"p" => "п",
"Q" => "Ь",
"q" => "ь",
"R" => "Р",
"r" => "р",
"S" => "С",
"s" => "с",
"T" => "Т",
"t" => "т",
"U" => "У",
"u" => "у",
"V" => "В",
"v" => "в",
"W" => "Ш",
"w" => "ш",
"Y" => "У",
"y" => "у",
"Z" => "З",
"z" => "з"
);
for($i = 0; $i < count($message); $i++)
{
if(empty($message[$i])) continue;
if($message[$i][0] != "<") $message[$i] = strtr($message[$i], $array);
}
return implode("", $message);
}
$message = array();
$position = 0;
while(true)
{
$part_of_msg = substr($msg, $position);
$pos = strpos($part_of_msg, "<");
if($pos !== false)
{
$message[] = substr($part_of_msg, 0, $pos);
$message[] = substr($part_of_msg, $pos, strpos($part_of_msg, ">") - $pos + 1);
$position = strlen(implode("", $message));
}
else
{
$message[] = $part_of_msg;
break;
}
}
echo transliteration($message);
?>
|
| |
|
|
|
|