2012-08-28 28 views
1

我的腳本獲取大量文本 - 它可能是HTML代碼或純文本,特殊字符可能是編碼或者不是或兩者都有。如何從部分編碼文本中正確獲取格式化內容

因此,內容可能包含的東西,如:

Don't Do That 

It's called "Meme" 

He said: 'Yeah' 

我該怎麼辦得到它作爲一個類型 - 編碼的或不?

我想:

htmlentities(html_entity_decode($text), ENT_QUOTES, "UTF-8"), ENT_NOQUOTES, "UTF-8") 

但它並不適用於所有情況。例如,對於:

回報

+0

確定嗎?我試過你的代碼(帶正確的括號),它返回'’ ..... ’' – Passerby

+0

它看起來像文本的某些部分是雙重編碼的。這就是我得到這個結果的原因。 –

+0

主要問題是我得到的東西像•代替 –

回答

1

由於html_entity_decode不會 「雙解碼」 的字符串,可以使用這樣的事情:

$str=<<<STR 
Don&#039;t Do That 
It's called "Meme" 
He said: &#039;Yeah&#039; 
STR; 

$tmp=html_entity_decode($str,ENT_QUOTES,"UTF-8"); 
while($str!=$tmp) 
{ 
    $str=$tmp; 
    $tmp=html_entity_decode($str,ENT_QUOTES,"UTF-8"); 
} 

現在你有一個$str那被完全解碼,你可以編碼它或直接使用它,無論你喜歡什麼。

當然,這不是一個完美的解決方案 - 有時人們傾向於首先編碼字符串 - 如果您無法控制或過濾數據源,可能值得一試。

+0

完美。這解決了一個問題。怎麼樣的事情??我如何編碼它們? htmlentities似乎不起作用。它返回垃圾或•本身 –

+0

@GuryMax「•」是一個有效的字符,它不會被編碼和解碼。 「你喜歡什麼」是什麼意思?爲什麼它會困擾你? – Passerby

+0

我將格式化文本保存到數據庫,然後顯示在HTML網頁上。我不時會看到垃圾,而不是•,','等等。所以我想正確編碼它。 –

相關問題