2010-08-06 86 views
0

我正在開發一個使用PHP,MySQL和HTML的網站。 在數據庫中,其中一個字段是可能包含HTML標記的文本,例如<b><i>防止或清除HTML/CSS標記

我的問題是,在網站的特定部分(搜索部分),我想只顯示該字段的'摘要'/子字符串。

問題是:當我得到該字段的一部分顯示在頁面中時,未關閉的標記會影響頁面其餘部分的顯示方式。

兩件事情會解決這個問題:

  1. 避免顯示這些特定的標記;
  2. 顯示字段後,我想關閉所有'打開標籤'。

請注意,選項一號會好得多。

回答

2

在向用戶顯示摘要之前,您可以使用strip_tags

+0

有PHP手冊巨大免責聲明:** WARNING ** 因爲用strip_tags()並不真正驗證HTML,部分或破碎的標籤可能導致刪除比預期更多的文本/數據。 – stillstanding 2010-08-06 01:46:30

+2

@stillstanding:是的,但(1)這裏的html或多或少處於控制之下,(2)我們只會給出一個總結,丟失一些數據不應該是一個很大的問題,它會符合當前的需求。儘管如此,人們會在'substr'之前執行'strip_tags'。 – Wrikken 2010-08-06 01:52:34

0

如果字符串xhtml兼容?如果是這樣,你可以嘗試滾動你自己的函數來匹配標籤,並在最後爲它們自動附加結束標籤。

使用正則表達式查找字符串中的所有開始和結束標記,然後遍歷標記。如果遇到開始標籤(沒有「/」),則將其推入堆棧。如果遇到關閉,則彈出堆棧頂部。

當所有的標籤都被處理完後,剩下的東西需要關閉。只需一次將它們從一個彈出,然後將結尾追加到字符串的後面。

0

我會做這樣::

函數獲取串出DB將返回變量$回報

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

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

其易於使用的預浸替換功能

$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的文本」;

,如果你把這個預浸更換 之前,它會告訴你結果=「1」沒有標籤