|
|
|
| Само по себе это не сложно. Но проблема в том, что в строке есть html-теги. Может, есть библиотечные функции PHP, которые эти теги игнорируют?
Спасибо. | |
|
|
|
|
|
|
|
для: coloboc66
(13.06.2013 в 13:50)
| | strip_tags поможет вам избавиться от тегов ) | |
|
|
|
|
|
|
|
для: mihdan
(13.06.2013 в 14:13)
| | Эта функция просто вырезает теги. А мне нужно, чтобы они в строке оставались, но не транскрипировались. | |
|
|
|
|
|
|
|
для: coloboc66
(13.06.2013 в 14:56)
| | Примерно так, если вложенность только 1-го уровня:
<?php
$text = "Begin<p>Tekst123</p>test1";
$text.= "<span>Tekst456</span>test2";
$text.= "<strong>Tekst789</strong>End";
echo preg_replace_callback(
// Начало строки до первого тэга если есть
'|^([^<]*)|',
create_function(
'$matches',
'return translit($matches[1]);'
),
// Внутри тэгов и между ними
preg_replace_callback(
'|<([^>]+)>([^<]*)<([^>]+)>([^<]+)|',
create_function(
'$matches',
'return "<". $matches[1] . ">". translit($matches[2]) . "<" . $matches[3] . ">" . translit($matches[4]);'
),
// Текст после последнего тэга если есть
preg_replace_callback(
'|([^>]*)$|',
create_function(
'$matches',
'return translit($matches[1]);'
),
$text
)
)
);
|
Можно и одной регуляркой всё сделать при желании....
translit - функция транскрибирации
Если тэгов много неизвестного уровня вложенности, т.е. полноценный html-код, то дальше сами думайте и дорабатывайте.
Вообще-то если такая задача возникла то что-то делается неверно.
Никаких html-тэгов в такого рода данных быть не должно. | |
|
|
|
|
|
|
|
для: DangerBay
(13.06.2013 в 16:33)
| | translit () - это должна быть моя самодельная функция? | |
|
|
|
|
|
|
|
для: coloboc66
(14.06.2013 в 16:47)
| | Немного поправил и пример функции транслит
<?php
function translit($string) {
$eng = array(
'yo','iy','yu','\'','ch','sh','c','u','k','e','n','g','sh','z','h','\'','f','y','v','a','p','r','o','l','d','j','е','ya','s','m','i','t','b');
$rus = array(
'ё','й','ю','ь','ч','щ','ц','у','к','е','н','г','ш','з','х','ъ','ф','ы','в','а','п','р','о','л','д','ж','е','я','с','м','и','т','б');
if(!empty($string))
return str_ireplace($eng, $rus, $string);
}
$text = "Nachalo <a href=#link>url</a><br/><br/><table border=1><tr><td><p>Tekst123</p></td><td>test1</td>";
$text.= "<td><span><b>Tekst456</b></span></td><td>test2</td>";
$text.= "<td><p><strong>Tekst789</strong></p></td><td>test3</td><tr></table><br/>Konec";
echo preg_replace_callback(
// Начало строки до первого тэга если есть
'|^([^<]*)|',
create_function(
'$matches',
'return translit($matches[1]);'
),
// Внутри тэгов и между ними
preg_replace_callback(
'|<([^>]+)>([^<]*)<([^>]+)>([^<]*)|',
create_function(
'$matches',
'return "<". $matches[1] . ">". translit($matches[2]) . "<" . $matches[3] . ">" . translit($matches[4]);'
),
// Текст после последнего тэга если есть
preg_replace_callback(
'|([^>]*)$|',
create_function(
'$matches',
'return translit($matches[1]);'
),
$text
)
)
);
|
В принципе даже любая вложенность тэгов допустима.
Функцию транслит сами корректируйте как правильно, думаю, там всё ясно. | |
|
|
|
|
|
|
|
для: DangerBay
(14.06.2013 в 22:25)
| | Спасибо! Кажется, всё работает. | |
|
|
|
|
|
|
|
для: DangerBay
(14.06.2013 в 22:25)
| | Скрипт работает хорошо. Но вот столкнулся с ситуацией, что иногда в строке есть латинские символы, которые нужно оставить без изменения. Как тут быть? Пробовал их помечать в исходном коде (что-то типа ^m), но это не помогает. :( | |
|
|
|
|