php strip_tags удаляет все

Я использую 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: &lt; или &#60; ,

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

 input.replace("<3", "& lt;3"); input = strip_tags(input);