Я использую strip-теги на входах пользователя для удаления всех возможных тегов, но функция str_tags php также удаляет '<', даже если не используется в теге.
например, некоторый пользователь может использовать смайлик как таковой:>. <или <3
или это может даже использоваться при алгоритмах и т. д.
Есть ли какое-либо решение, позволяющее использовать теги '<' на ленте?
Проблема в этом случае
$foo = "text >.<text"
Попробуйте это выражение (preg_replace с ims falgs):
<\s*\/?[a-z0-9]+(\s*[az\-0-9]+)*(\s*[az\-0-9]+\="[^"]*")*\s*\/?>
@edit: Например:
<?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*[az\-0-9]+)*(\s*[az\-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);