Проверка на открытие или закрытие тега

111
09 июня 2019, 15:30

К примеру переменная содержит строку:

$string = 'Hello world</p>';

или

$string = '<p>Hello world';

Как проверить открытие/закрытие тегов и в случае если ошибка найдена - исправить..

Answer 1

Проверку парных тегов, расположенных в одной строке, можно сделать с использованием регулярных выражений.

<?php
$arr = [
    '   <p>Hello world',
    '   Hello world</p>',
    '<span>Hello world',
    'Hello world</h1>'
];
function checker($str) 
{
    if (preg_match('/^\s*(<([a-z0-9]+)>).*/', $str, $res)) {
        $str = $str . "</" . $res[2] . ">";
        return $str;
    }
    if (preg_match('/^(\s*)(.*)<\/([a-z0-9]+)>$/', $str, $res)) {
        if ($res[1]) {
            $str = str_replace(
                $res[1],
                $res[1] . '<' . $res[3] . '>',
                $str
            );
        } else {
            $str = '<' . $res[3] . '>' . $str;
        }
        return $str;
    }
}
foreach ($arr as &$item) {
    $item = checker($item);
}

var_dump($arr);
Answer 2

лучше всего использовать html парсер, но если это делать вручную то надо еще учитывать тот факт что не все теги парные... если бы все были парными то тогда можно было бы проверять количество > и < (должно быть четное число)

Answer 3
$closed_tag = substr_count($text, "</p>");
$open_tag = substr_count($text, "<p>");
if ($closed_tag != $open_tag) {
    $text = str_replace("<p>", "", $text);
    $text = str_replace("</p>", "", $text);
   }

Не нашел ничего более адекватного. Пришлось оставлять так.

READ ALSO
Не работает require_once __DIR__

Не работает require_once __DIR__

Ситуацияphp7, OpenServer

120
Как получить чужой домен при запросе в AJAX?

Как получить чужой домен при запросе в AJAX?

documentreferrer с чужого домена у которого https - получаю пустое значение, это понятно, как можно по другому получить значение (домен) в ajax? $_SERVER['HTTP_REFERER']...

100
Не подключается к БД (PDO)

Не подключается к БД (PDO)

Такая ошибка:

138