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

Форум Регулярные Выражения

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

 

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

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

тема: слова в тегах [gl] преобразовать в латиницу
 
 автор: dirol   (02.07.2008 в 23:09)   письмо автору
 
 

Найденные слова в тексте в тегах [gl] надо передать на латинице на другую страницу так как русский не хрена не воспринимается. Вот сделал так но ошибки как правильно сделать подскажите

$text="это [gl]софтовый[/gl] текст";

$text = preg_replace("#\[gl\](.+?)\[/gl\]#sie", '<a href=\"ru2Lat($1)\">ru2Lat($1)</a>', $text);

echo "$text
\n";

function ru2Lat($string){
$string = str_replace("/","",$string);
$string = str_replace("\\","",$string);
$string = str_replace(".","",$string);
$string = str_replace("`","",$string);
$string = str_replace("'","",$string);
$string = str_replace(",","",$string);
$string = str_replace("-","",$string);
$string = str_replace("=","",$string);
$string = str_replace("+","",$string);
$string = str_replace("—","",$string);
$string = str_replace("!","",$string);
$string = str_replace(":","",$string);
$string = str_replace('"',"",$string);
$string = str_replace("&laquo;","",$string);
$string = str_replace("&raquo;","",$string);
$string = str_replace("&ldquo;","",$string);
$string = str_replace("&bdquo;","",$string);
$string = str_replace("&quot;","",$string);
$string=ereg_replace(" +","_",$string);
$rus = array('ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я');
$lat = array('yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA');
$string = str_replace($rus,$lat,$string);
$string = strtr($string,
"АБВГДЕЗИЙКЛМНОПРСТУФХЪЫЬЭабвгдезийклмнопрстуфхъыьэ",
"ABVGDEZIJKLMNOPRSTUFH'I'Eabvgdezijklmnoprstufh'i'e");
$string = str_replace("'","",$string);
$string = str_replace('"',"",$string);
return($string);
}


выдает об ошибке

   
 
 автор: Эй   (02.07.2008 в 23:20)   письмо автору
 
   для: dirol   (02.07.2008 в 23:09)
 

Модификатор 'e' интерпретирует заменяющую строку как PHP-код.
У вас получается заменяющая строка:
<a href=\"ru2Lat($1)\">ru2Lat($1)</a>


Валидным PHP-кодом она не является.

   
 
 автор: AcidTrash   (02.07.2008 в 23:44)   письмо автору
 
   для: dirol   (02.07.2008 в 23:09)
 

Особо не разбирался, но насчет регулярок, то так
$text = preg_replace("#\[gl\](.+?)\[/gl\]#sie", "'<a href=\"'.ru2Lat('$1').'\">ru2Lat($1)</a>'", $text);       

   
 
 автор: dirol   (03.07.2008 в 00:00)   письмо автору
 
   для: AcidTrash   (02.07.2008 в 23:44)
 

всем спасибо поогли.

   
 
 автор: GeorgeIV   (03.07.2008 в 10:19)   письмо автору
 
   для: dirol   (03.07.2008 в 00:00)
 

а функцию strtr никто не вспомнил, очень, кстати, удобная для транслита



strtr
(PHP 3, PHP 4, PHP 5)

strtr -- Преобразует заданные символы
Описание
string strtr ( string str, string from, string to )

string strtr ( string str, array replace_pairs )


Эта функция возвращает строку str, в которой каждое вхождение любого символа из перечисленных в from заменено на соответствующий символ из строки to.

Если длины строк from и to отличаются, "лишние" символы в более длинной строке не используются. Пример 1. Пример использования strtr()

<?php
$addr = strtr($addr, "дец", "aao");
?>



strtr() может вызываться с двумя аргументами. В этом случае from должен быть массивом, индексы которого трактуются как строки поиска, а соответствующие значения - как строки замены. strtr() в первую очередь заменяет более длинные подстроки, причем одна и та же строка поиска используется только один раз.

Пример 2. Пример использования strtr() с двумя аргументами

<?php
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>

Этот код выведет:

hello all, I said hi

   
 
 автор: dirol   (10.07.2008 в 16:10)   письмо автору
 
   для: GeorgeIV   (03.07.2008 в 10:19)
 

возникла проблема
$text="это [gl]соф товый[/gl] текст";

$text = preg_replace("#\[gl\](.+?)\[/gl\]#sie", '<a href=\"ru2Lat($1)\">ru2Lat($1)</a>', $text);

если слово с пробелом то писец сразу ошибка идет. подскажите как исправить

   
 
 автор: xx77   (10.07.2008 в 22:10)   письмо автору
 
   для: dirol   (10.07.2008 в 16:10)
 

непонятки там какие-то у вас с буквами ЫыЪъЬь, пробелами , и ещё некоторыми символами которые могут оказаться в таких строках.
, Если могут
<pre><?
function ru2Lat($string){ 

$string str_replace(
 array(
"\n""\r""ь""Ь""ъ""Ъ""/""\\"".""`""'"",""-""=""+",
 
"—""!"":"'"'"&laquo;""&raquo;""&ldquo;",
 
"&bdquo;""&quot;"),
 
''$string);
 
$rus = array(' ''ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я'); 
$lat = array('_''yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA'); 
$string str_replace($rus$lat$string); 

$string strtr($string
"АБВГДЕЗИЙКЛМНОПРСТУФХЫЭабвгдезийклмнопрстуфхыэ"
"ABVGDEZIJKLMNOPRSTUFHYEabvgdezijklm noprstufhye");

return(
$string); 
}

$text="это [gl] 'софтовый'
 
 [/gl] текст"


$text preg_replace("#\[gl\](.+?)\[/gl\]#sie""'<a href=\"'.ru2Lat('$1').'\">' . ru2Lat('$1') . '</a>'"$text); 

echo 
"$text 
\n"



?></pre>

   
 
 автор: xx77   (10.07.2008 в 22:36)   письмо автору
 
   для: xx77   (10.07.2008 в 22:10)
 

хотя лучше так
$text = preg_replace("#\[gl\](.+?)\[/gl\]#sie", "'<a href=\"'.(\$x = ru2Lat('$1')).'\">' . \$x . '</a>'", $text); 
чтобы не применять дважды одну функцию к одному тексту

   
Rambler's Top100
вверх

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