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

Тема в разделе "PHP", создана пользователем kozax89, 25 окт 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    htmlspecialchars($a) - обрезает html тэги, верно? А какая функция режет только PHP тэги но оставляет html? И разрешение html тэгов ведь не поалияет на безопасность, правда? ))
     
  2. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    733
    Симпатии:
    422
    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 уязвимость. Так что нужно обрабатывать все!
     
    kozax89 нравится это.
  3. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    понятно, а нет варианта вырезать только PHP тэги? ))
     
  4. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    733
    Симпатии:
    422
    на сколько я знаю универсальной такой функции нет, если самописные только.
    можете посмотреть в движках форумов и CMS + юзайте поисковые системы.
     
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Тебе надо вырезать именно теги или все, что представляет собой кусок php-кода? как вариант для обоих случаев можно использовать str_replace либо preg_replace
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    А в чем проблема вырезать код от <? до ?>
     
  7. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    ну допустим обработчик получает переменную $text - В ней по идеи надо дать пользователю возможность пользоваться любым html но при этом заблокировать возможность использовать PHP

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

    А как удалить начиная от <? и заканчивая на ?> ? Такой вариант былбы просто чудесен :)
     
  8. GrizliK

    GrizliK Создатель

    Регистр.:
    4 сен 2009
    Сообщения:
    47
    Симпатии:
    3
    Примерно так:)
    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
     
    kozax89 нравится это.
  9. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    733
    Симпатии:
    422
    вот так:
    PHP:
    $file preg_replace('#(\<\?).+?(\?\>)#is','${1}${2}'$file);
     
    kozax89 нравится это.
  10. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Спасибо обоим, хотя вариант t0wer покомпактнее :p
     
Статус темы:
Закрыта.