раздеть теги — php strip_tags удаляет все

Я использую тэги strip на пользовательских входах, чтобы удалить все возможные тэги, но php-функция strip_tags также удаляет ‘<‘даже если не используется в теге.

например, какой-то пользователь может использовать смайлик как таковой:>.< или же <3

или это может даже использоваться, когда алгоритмы и т. д.

Есть ли какое-либо решение, позволяющее<‘на полосках тегов?

3

Решение

Проблема в этом случае

$foo = "text >.<text"

Попробуйте это выражение (preg_replace с ims falgs):

<\s*\/?[a-z0-9]+(\s*[a-z\-0-9]+)*(\s*[a-z\-0-9]+\="[^"]*")*\s*\/?>

@редактировать:
Например:

<?php

$test = "text text text >.<asd text <div style=\"font-size:12px;\">text >.<in div</div> asd asd <b>bolded</b> <script> alert('this is javascriptalert'); </script>";

$stripped =  strip_tags($test);
$replaced = preg_replace('/<\s*\/?[a-z0-9]+(\s*[a-z\-0-9]+)*(\s*[a-z\-0-9]+\="[^"]*")*\s*\/?>/ims','',$test);
var_dump($stripped,$replaced);
2

Другие решения

Вы можете использовать регулярное выражение:

$result = preg_replace("/\<\/?[A-Za-z\-\_]+\>/", "", YOUR_DATA);
0

Анализатор HTML использует < чтобы обозначить начало элемента, так что в целом вы в большей степени не используете его в любом случае. Если вы хотите, чтобы знак «меньше» отображался в вашей копии, используйте вместо этого имя или номер HTML: &lt; или же &#60;,

0

Нет, так будут работать strip_tags. Нет никакой разницы между открывающей скобкой и смайликом, поэтому вы можете добавить исключения перед strip_tags:

input.replace("<3", "& lt;3");
input = strip_tags(input);
0
По вопросам рекламы [email protected]