Гость_Евгений
12.03.2013 - 14:18
Здравствуйте!
Я использую регулярку:
preg_match('|<title.*?>(.*)</title>|sei', $html_code)
Нужно найти и заменить содержимое этого тега, например, переменной $new_title
Как это сделать?
$html = '<title>Мой сайт</title>';
$var = 'Твой сайт';
preg_match('!<title>(.*?)</title>!i',$html, $title);
$html = str_replace($title['1'],$var,$html);
echo $html;
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Да, но если содержимое title изначально не известно?
Значит можно просто получить значение этого title, а потом произвести замену, как вы привели в примере?
исправил
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
А что сделать, если между title пусто?
Выводится ошибка.
Можно как-то вставить свой текст вместо этой пустоты?
arlamar
12.03.2013 - 22:17
$html = '<title></title>';
$var = 'Твой сайт';
$html = preg_replace('/(?<=<title>)(.*)(?=<\/title>)/iu', $var, $html);
echo $html;
Убрать u если не utf
killer8080
12.03.2013 - 22:18
$html = preg_replace('#(<title[^>]*>)(.*)(</title>)#isU', '$1'.$new_title.'$2', $html);
А если там не пробела, а перенос строки?
Убрал $2 из последнего варианта, так правильно?
$html = '<title>
</title>';
$var = 'Твой сайт';
$html = preg_replace('#(<title[^>]*>)(.*)(</title>)#isU', '$1'.$var.'', $html);
echo $html;
Вроде бы работает как нужно.
Хотя нет, не работает - title не закрывается!
killer8080
12.03.2013 - 22:42
Цитата (Guest @ 12.03.2013 - 20:37) |
А если там не пробела, а перенос строки? |
вот для этого и нужен модификатор s
Цитата (Guest @ 12.03.2013 - 20:37) |
Убрал $2 из последнего варианта, так правильно? |
Нет, $2 это захват закрывающего тега title, без него тег останется не закрытым после замены. Если так не нравится подмаска, можешь просто ручками прописать его в замену, просто так запись была короче, и тег сохранялся в исходном виде (регистре)
killer8080
12.03.2013 - 22:44
Пардон, ошибочка не $2, а $3
ну или так
$html = preg_replace('#(<title[^>]*>).*(</title>)#isU', '$1'.$new_title.'$2', $html);
О, killer8080, спасибо!
Теперь всё работает как надо!
Сейчас заметил, что если написать только цифры, то первый title уничтожается и на выходе получается:
07</title>
А до изменения было так:
<title>Заголовок страницы</title>
Регулярка:$html = preg_replace('#(<title[^>]*>).*(</title>)#isU', '$1'.$new_title.'$2', $html);
Такой баг происходит, если заголовок начинается с числа.
Причём открывающий тег title уничтожается вместе с первым числом!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.