2010-08-06 3 views
0

Я занимаюсь разработкой веб-сайта с использованием PHP, MySQL и HTML. В базе данных одно из полей - это текст, который может содержать теги HTML, например <b> или <i>.Запретить или очистить теги HTML/CSS

Моя проблема заключается в том, что в определенной части сайта (раздел поиска) я хочу отображать только «сводную»/подстроку этого поля.

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

Две вещи бы решить эту проблему:

  1. Предотвратить эти конкретные теги, которые будут показаны;
  2. После того, как поле отображается, я хочу закрыть все «открытые теги».

Обратите внимание, что вариант номер один был бы намного лучше.

ответ

2

Вы можете использовать strip_tags перед тем, как показать сводку пользователю.

+0

Там огромный отказ от ответственности в PHP инструкции: ** Предупреждение ** Поскольку strip_tags() фактически не подтверждать HTML, частичные или сломанные теги могут привести к удалению большего количества текста/данных, чем ожидалось. – stillstanding

+2

@stullstanding: да, но поскольку (1) html здесь более или менее под контролем, и (2) мы только собирались дать резюме, потеря некоторых данных не должна быть такой большой проблемой, соответствуют текущей потребности. Однако можно было бы использовать 'strip_tags' _before_ a' substr'. – Wrikken

0

Если строка xhtml совместима? Если это так, вы можете попробовать скопировать свою собственную функцию для соответствия тэгам и автоматически добавлять закрывающие теги для них в конце.

Используйте регулярное выражение, чтобы искать все открывающие и закрывающие теги в строке, а затем прокручивать теги. Если он встречает открывающий тег (без «/»), то вставьте его в стек. Если он сталкивается с закрытием, то поместите верхнюю часть стека.

Когда все теги обработаны, то, что осталось в стеке, нужно будет закрыть. Просто вытащите их по одному и добавьте закрытие на спину своей строки.

0

Я хотел бы сделать это следующим образом ::

функцию, чтобы получить строку из БД будет возвращать Var $ возврат товара

$tag = strip_tags($return); // will remove tags if exist 

print '<p>'$tag'</p>; 
0

его легко использовать PREG заменить функцию

$search = array(


    "'<script[^>]*?>.*?</script>'si", // strip out javascript 
        "'<[\/\!]*?[^<>]*?>'si",   // strip out html tags 
        "'([\r\n])[\s]+'",     // strip out white space 
        "'&(quot|#34|#034|#x22);'i",  // replace html entities 
        "'&(amp|#38|#038|#x26);'i",   // added hexadecimal values 
        "'&(lt|#60|#060|#x3c);'i", 
        "'&(gt|#62|#062|#x3e);'i", 
        "'&(nbsp|#160|#xa0);'i", 
        "'&(iexcl|#161);'i", 
        "'&(cent|#162);'i", 
        "'&(pound|#163);'i", 
        "'&(copy|#169);'i", 
        "'&(reg|#174);'i", 
        "'&(deg|#176);'i", 
        "'&(#39|#039|#x27);'", 
        "'&(euro|#8364);'i",    // europe 
        "'&a(uml|UML);'",     // german 
        "'&o(uml|UML);'", 
        "'&u(uml|UML);'", 
        "'&A(uml|UML);'", 
        "'&O(uml|UML);'", 
        "'&U(uml|UML);'", 
        "'&szlig;'i", 

        ); 
    $replace = array( 

                "", 
         "", 
         "\\1", 
         "\"", 
         "&", 
         "<", 
         ">", 
         " ", 
         chr(161), 
         chr(162), 
         chr(163), 
         chr(169), 
         chr(174), 
         chr(176), 
         chr(39), 
         chr(128), 
         "ä", 
         "ö", 
         "ü", 
         "Ä", 
         "Ö", 
         "Ü", 
         "ß", 

        ); 

    $text = preg_replace($search,$replace,$yourtextasstring); 
    echo $text; 

используйте это и измените $ yourtextasstring на свою строку с html-текстом или css

позволяет сказать код: $ yourtextasstring = "текст с тегами html 1";

, если положить ее перед PREG заменить он покажет вам результат = «1» без тегов

Смежные вопросы