我正在開發一個使用PHP,MySQL和HTML的網站。 在數據庫中,其中一個字段是可能包含HTML標記的文本,例如<b>
或<i>
。防止或清除HTML/CSS標記
我的問題是,在網站的特定部分(搜索部分),我想只顯示該字段的'摘要'/子字符串。
問題是:當我得到該字段的一部分顯示在頁面中時,未關閉的標記會影響頁面其餘部分的顯示方式。
兩件事情會解決這個問題:
- 避免顯示這些特定的標記;
- 顯示字段後,我想關閉所有'打開標籤'。
請注意,選項一號會好得多。
我正在開發一個使用PHP,MySQL和HTML的網站。 在數據庫中,其中一個字段是可能包含HTML標記的文本,例如<b>
或<i>
。防止或清除HTML/CSS標記
我的問題是,在網站的特定部分(搜索部分),我想只顯示該字段的'摘要'/子字符串。
問題是:當我得到該字段的一部分顯示在頁面中時,未關閉的標記會影響頁面其餘部分的顯示方式。
兩件事情會解決這個問題:
請注意,選項一號會好得多。
在向用戶顯示摘要之前,您可以使用strip_tags。
如果字符串xhtml兼容?如果是這樣,你可以嘗試滾動你自己的函數來匹配標籤,並在最後爲它們自動附加結束標籤。
使用正則表達式查找字符串中的所有開始和結束標記,然後遍歷標記。如果遇到開始標籤(沒有「/」),則將其推入堆棧。如果遇到關閉,則彈出堆棧頂部。
當所有的標籤都被處理完後,剩下的東西需要關閉。只需一次將它們從一個彈出,然後將結尾追加到字符串的後面。
我會做這樣::
函數獲取串出DB將返回變量$回報
$tag = strip_tags($return); // will remove tags if exist
print '<p>'$tag'</p>;
其易於使用的預浸替換功能
$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);'",
"'ß'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」沒有標籤
有PHP手冊巨大免責聲明:** WARNING ** 因爲用strip_tags()並不真正驗證HTML,部分或破碎的標籤可能導致刪除比預期更多的文本/數據。 – stillstanding 2010-08-06 01:46:30
@stillstanding:是的,但(1)這裏的html或多或少處於控制之下,(2)我們只會給出一個總結,丟失一些數據不應該是一個很大的問題,它會符合當前的需求。儘管如此,人們會在'substr'之前執行'strip_tags'。 – Wrikken 2010-08-06 01:52:34