Найти, заменить или добавить тег title

S
На сайте с 13.11.2012
Offline
72
1445

У меня есть функция, которая находит и заменяет тег title (можно заменить, можно оставить существующий)

function renderTitle($math) {
$title = empty($_POST["title"]) ? $math[1] : $_POST["title"];
return "<title>{$title}</title>";
}
// Находим title и заменяем его на свой
$page_source = preg_replace_callback('/\<title\>(.*?)\<\/title\>/si', 'renderTitle', $page_source);

Пожалуйста, помогите изменить функцию таким образом, чтобы она умела создавать тег title если его нет вообще, к примеру, создавала его после открывающего <head>

Спасибо!

p.s. я ловлю title из post запроса с сайта который мне не принадлежит и я заранее не знаю, есть ли там title

Gerga
На сайте с 02.08.2015
Offline
94
#1

Smirnof, как вариант:


function renderTitle($math) {
$title = empty($_POST["title"]) ? $math[1] : $_POST["title"];
return "<title>{$title}</title>";
}

if ( strpos( $page_source, '<title' )) {
// если есть тег title
$page_source = preg_replace_callback('/\<title\>(.*?)\<\/title\>/si', 'renderTitle', $page_source);
} else {
// если тега title нет
$page_source = str_replace( '</head>', '<title>'. ($_POST["title"] ? $_POST["title"] : 'default') .'</title></head>', $page_source );
}
S
На сайте с 13.11.2012
Offline
72
#2

Gerga, спасибо!

Я бы не догадался...

J
На сайте с 20.02.2014
Offline
120
jkm
#3

$page_source = preg_replace_callback('~<title>(.*?)</title>|(?=</head>)~si', 'renderTitle', $page_source, 1);
S
На сайте с 13.11.2012
Offline
72
#4

jkm, здорово!

Спасибо.

S
На сайте с 13.11.2012
Offline
72
#5

Помогите еще, пожалуйста.

Написал скрипт, есть необходимость проверить пришедший на него post запрос на наличие домена в блек листе.

Т.е. создаю блек лист (к примеру, файл) с доменами:

ya.ru,google.com и т.д.

В момент обработки скрипта, нужно выполнить проверку пришедшего в post - url, если домен в блек листе - вывести сообщение и не исполнять скрипт ниже, если домена нет в блек листе - выполнить весь скрипт.

Можно это осуществить?

И еще, день вожусь и не могу без ошибок сделать проверку на тег внутри <head></head>,

т.е. в <head> есть тег noindex, нужно как и в первом варианте остановить обработку скрипта ниже и выполнить редирект на пришедший в post - url адрес, если noindex нет - выполнить весь скрипт.

Кучу вариантов перепробовал, получается частями и ошибок куча.

Помогите, пожалуйста.

S
На сайте с 13.11.2012
Offline
72
#6

Блек лист сделал так


$blackList = array(
'yandex.ru',
'google.ru'
);
if (isset($url)) {
// Очень упрощенный вариант
$domain = $url;
if (in_array($domain, $blackList)) {
echo "Извините, $url находится в списке запрещенных адресов!";
return;
}
}

Обрадовался но рано, с протоколом http и https блек лист не работает, думал достаточно имя внести...

С <head> noindex ничего не придумал :(

S
На сайте с 13.11.2012
Offline
72
#7

Снова с title вопрос появился.

Вот мой код:


function renderTitle($math) {
$title = empty($_POST["title"]) ? $math[1] : $_POST["title"];
return "<title>{$title}</title>";
}
$page_source = preg_replace_callback('~<title>(.*?)</title>|(?=</head>)~si', 'renderTitle', $page_source, 1);

Находит title и изменяет его если задан дефолтный заголовок, если title нет то создает его с дефолтным заголовком.

Пожалуйста, помогите изменить код так, чтобы он не изменял title если он существует

но создавал title с дефолтным заголовком, если title в коде отсутствует.

Спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий