2016-11-21 70 views
2

假設我有一個sting,即和htmlentities將其變爲
"a s d d"如何替換已解碼的不可拆分空間(nbsp)

如何替換(使用preg_replace)它沒有編碼它的實體?我試過preg_replace('/[\xa0]/', '', $string);,但它不起作用。我試圖從我的字符串中刪除那些特殊字符,因爲我不需要它們

超出正則表達式的可能性有多大?

編輯 字符串我想分析:http://pastebin.com/raw/7eNT9sZr
與功能preg_replace('/[\r\n]+/', "[##]", $text)
供以後implode("</p><p>", explode("[##]", $text))

我的問題是不完全「如何」做到這一點(因爲我可以編碼實體,刪除實體我不需要和解碼實體)。但是如何用str_replace或preg_replace刪除這些文件。

+0

'htmlentities'預防xss。如果您想在瀏覽器中進行渲染,則只會將空間評估爲空間。如果沒有,那麼您是否想要替換空格或 '' – georoot

+2

? – Joshua

+0

@georoot htmlentities可以防止錯誤的HTML輸出(即,它確保信息被髮出,而不是數據),XSS只是惡意製作的不良數據。 – user2864740

回答

5

問題是,您正在嚴格指定不可破壞的UTF-8空間。正確的代碼是0xc2a0,你只能指定該字符代碼的一半。

你可以用一個簡單的str_replace或使用正則表達式替換它:

// faster solution 
$regular_spaces = str_replace("\xc2\xa0", ' ', $original_string); 

// more flexible solution 
$regular_spaces = preg_replace('/\xc2\xa0/', ' ', $original_string); 

注意,在str_replace的情況下,你必須使用引號搜索字符串,因爲只有被引用的字符串被解析並通過PHP進行處理(它首先將字符代碼轉換爲實際字符)。

請注意如何將UTF-8字符代碼指定爲兩個單獨的數字。

+0

請注意,'str_replace()'也可以工作,速度更快。 – simon

+0

@simon謝謝你,你說得對。添加到我的答案。 –

+0

我不知道我必須寫'\ xc2 \ xa0'並寫下'\ xc2a0' ......我的失敗。謝謝! – Grzegorz