2011-12-11 181 views
3

目前,我使用strip_tags,從我處理的字符串中刪除所有的html標籤。然而,我注意到最近,它加入的話,它包含在標籤去除 即刪除html標籤

$str = "<li>Hello</li><li>world</li>"; 
$result = strip_tags($str); 
echo $result; 
(prints HelloWorld) 

你怎麼能解決這個得到什麼?

+3

嗯,你的字符串中沒有空格,爲什麼PHP應該插入它們(以及where)?認爲它是簡單的替換功能。 –

+2

嗨費利克斯。我明白你的意思。事情是,這是非常普遍的事情。假設您需要從文檔中提取標籤,在數據庫中插入純文本以進行全文搜索。您如何確保內容清晰且格式正確? – Thomas

+0

這就像雞和雞蛋一樣,你想刪除HTML標籤,但是保持原文的格式,很難保持雙方的平衡。如果你想迎合全文搜索,有很多方式... – ajreal

回答

1

你會用htmlentities()

更好它不會刪除<>,但逃脫他們。

+0

嗨。問題是我不想要任何標籤(編碼或不是) – Thomas

+0

爲什麼你想要用戶輸入標籤來刪除它們? –

+1

它不是用戶輸入 – Thomas

2

這一切都取決於剝離HTML標籤後你想要的輸出。例如:

如果你想<li>標籤中的項目普通列表進行轉換,我建議你使用str_replace*</li>\n更換<li>

strip_tags的建議是在沒有任何其他轉換的情況下襬脫HTML標籤。

+0

本質上,我想要一個字符串,所有的html標籤被刪除而不會搞亂原文(連接詞等)。 – Thomas

2

這將用空格替換所有html標記(實際上,不檢查它是否爲html),然後將可能的雙空白替換爲單個空格並刪除開始或結束的空格。

$str = preg_replace("/<.*?>/", " ", $str); 
$str = trim(str_replace(" ", " ", $str)); 
+2

http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html –

2

你可以玩這正則表達式模式是最好的,什麼來代替:)

// ------------------------------------ 

function strip_html_tags($string) { 

    $string = str_replace("\r", ' ', $string); 
    $string = str_replace("\n", ' ', $string); 
    $string = str_replace("\t", ' ', $string); 
## $string = str_replace("<li>', "\n* ", $string); 

## $pattern = "/<.*?>/"; 
    $pattern = '/<[^>]*>/'; 

    $string= preg_replace ($pattern, ' ', $string); 

    $string= trim(preg_replace('/ {2,}/', ' ', $string)); 

return $string; 

} 

// ------------------------------------ 

您還可以添加特殊替換項,如:'<li>'"\n* " ...或whateve r :)

1
echo strip_tags(str_replace('>', '> ', $string)); 

這應該做你正在尋找的所有情況下。

1

從你的代碼中我發現在Hello Word和你不希望strip_tags函數爲你添加它之間沒有初始空間,所以爲了使strip_tags函數能夠生成你想要的東西,我添加了第一個列表標籤之後的空格,結果是Hello world。

您可以複製並粘貼此代碼並運行以查看差異。

$str = "<li>Hello</li> <li>world</li>"; 
    $result = strip_tags($str); 
    echo $result; 
    //Expected result after Execution is Hello world 
+0

你爲什麼把它變成一個社區維基? –

+0

,因爲我收到了一條消息,表示我可以這樣做,會造成傷害嗎?或者我做錯了什麼? –

+0

沒有傷害,但是現在這個答案你不會得到聲望點。 –