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

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

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

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

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


person user2707590    schedule 23.10.2015    source источник


Ответы (4)


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

$foo = "text >.<text"

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

<\s*\/?[a-z0-9]+(\s*[a-z\-0-9]+)*(\s*[a-z\-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*[a-z\-0-9]+)*(\s*[a-z\-0-9]+\="[^"]*")*\s*\/?>/ims','',$test);
var_dump($stripped,$replaced);
person kuba    schedule 23.10.2015

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

$result = preg_replace("/\<\/?[A-Za-z\-\_]+\>/", "", YOUR_DATA);
person Mayur Koshti    schedule 23.10.2015

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

person Sinister Beard    schedule 23.10.2015

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

input.replace("<3", "& lt;3");
input = strip_tags(input);
person Danny    schedule 23.10.2015