Я использую тэги strip на пользовательских входах, чтобы удалить все возможные тэги, но php-функция strip_tags также удаляет ‘<‘даже если не используется в теге.
например, какой-то пользователь может использовать смайлик как таковой:>.< или же <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);
Вы можете использовать регулярное выражение:
$result = preg_replace("/\<\/?[A-Za-z\-\_]+\>/", "", YOUR_DATA);
Анализатор HTML использует < чтобы обозначить начало элемента, так что в целом вы в большей степени не используете его в любом случае. Если вы хотите, чтобы знак «меньше» отображался в вашей копии, используйте вместо этого имя или номер HTML: <
или же <
,
Нет, так будут работать strip_tags. Нет никакой разницы между открывающей скобкой и смайликом, поэтому вы можете добавить исключения перед strip_tags:
input.replace("<3", "& lt;3");
input = strip_tags(input);