PHP удаление тегов

239
29 октября 2017, 20:17

Здравствуйте добрые люди, не судите строго за детский вопрос, я только учусь. В PHP есть функция strip_tags, которая удаляет html теги в строке. Во втором ее параметре можно указать исключения, т.е. те теги которые она должно оставить, например вот так:

echo strip_tags($text, '<i><u><b>');

Вопрос; можно ли наоборот, указать в функции те параметры, которая она должна удалить, а все остальное оставить? Например

функция($text,<a>) //удалить теги <a> а все остальные оставить

Не обязательно именно strip_tags(), можно предложить и аналог. Регулярное выражение составить могу, но может есть специальная функция?

Answer 1

Можно так же обойтись без использования сторонних библиотек. Эта функция будет удалять теги, переданные на её вход вторым параметром. Можно передавать более одного тега, разделяя их запятой (можно с пробелом или без него).

Примеры использования:

// Удалить только теги "a" (текст тега останется)
echo del_tags($text, 'a');
// Удалить теги "a" и "br"
echo del_tags($text, 'a,br');
// Или с пробелами между именами тегов
echo del_tags($text, 'a, br'); // и т.д.

function del_tags($txt, $tag) {
    $tags = explode(',', $tag);
    do {
        $tag = array_shift($tags);
        $txt = preg_replace("~<($tag)[^>]*>|(?:</(?1)>)|<$tag\s?/?>~x", '', $txt);
    } while (!empty($tags));
    return $txt;
}

Демо

Answer 2

Можете воспользоваться библиотекой HTML Purifier.

Работает она не очень быстро, но свое дело делает, пример конфига для вашего случая:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.AllowedElements', ['a']); // Разрешаем только тег a
$config->set('HTML.AllowedAttributes', ['a.href']); // Разрешает использовать только атрибут href у тега a
$purifier = new HTMLPurifier($config);
$clear_text = $purifier->purify($text);

Возможностей у него очень много, можете почитать на досуге, возможно есть где то и русское описание.

READ ALSO
MySQL запись в базу не происходит

MySQL запись в базу не происходит

Вот таким образом произвожу запись в базу:

206
Библиотека GLFW в C++ проекте в QT Creator

Библиотека GLFW в C++ проекте в QT Creator

Я пытаюсь создать C++ проект с использованием библиотеки GLFWВ качестве IDE использую QT Creator, система сборки - CMake, ОС - Windows

297
Возврат typedef struct в C++ [требует правки]

Возврат typedef struct в C++ [требует правки]

Имеется следующий код

270
Почему этот код работает, а этот нет?

Почему этот код работает, а этот нет?

Вот код, который работает:

258