вопрос по htmlspecialchars($a)

Статус
В этой теме нельзя размещать новые ответы.

kozax89

Постоялец
Регистрация
12 Июл 2009
Сообщения
135
Реакции
4
htmlspecialchars($a) - обрезает html тэги, верно? А какая функция режет только PHP тэги но оставляет html? И разрешение html тэгов ведь не поалияет на безопасность, правда? ))
 
htmlspecialchars - Преобразует специальные символы в HTML сущности? а не обрезает!
PHP:
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href='test'&gt;Test&lt;/a&gt;
?>

strip_tags - Удаляет HTML и PHP тэги из строки.

Если оставлять HTML не обработанным, то можно на свой код получить XSS уязвимость. Так что нужно обрабатывать все!
 
понятно, а нет варианта вырезать только PHP тэги? ))
 
на сколько я знаю универсальной такой функции нет, если самописные только.
можете посмотреть в движках форумов и CMS + юзайте поисковые системы.
 
понятно, а нет варианта вырезать только PHP тэги? ))
Тебе надо вырезать именно теги или все, что представляет собой кусок php-кода? как вариант для обоих случаев можно использовать str_replace либо preg_replace
 
А в чем проблема вырезать код от <? до ?>
 
ну допустим обработчик получает переменную $text - В ней по идеи надо дать пользователю возможность пользоваться любым html но при этом заблокировать возможность использовать PHP

Заманчивым выглядит вариант tostrss - можешь описать подробней как этого добится? )) Поискал в инете и нашел только про удаление определенных позиций из строки - например с 5 по 10 позицию.

А как удалить начиная от <? и заканчивая на ?> ? Такой вариант былбы просто чудесен :)
 
Примерно так:)
PHP:
<?php
$text='<?echo "Hello"?>My<?echo "Hello"?>name<?echo "Hello"?>is';
$pos1=strpos($text,"<?");
$pos2=strpos($text,"?>");
if ($pos2>0) $flag=True;
else $flag=False;
while ($flag){
    $text1=substr($text,0,$pos1);
    $text2=substr($text,$pos2+2);
    $text=$text1.' '.$text2;
    $pos1=strpos($text,"<?");
    $pos2=strpos($text,"?>");
    if ($pos2>0) $flag=True;
    else $flag=False;
}
echo '<br>'.htmlentities($text);
?>

Добавлено через 38 секунд
Вместо <?echo "Hello"?>My<?echo "Hello"?>name<?echo "Hello"?>is
выведется My name is
 
Спасибо обоим, хотя вариант t0wer покомпактнее :p
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху