2012-09-21 76 views
0

只是一個簡短的問題,考慮到XML請求或響應,這兩條線總是會給出相同的結果嗎?這是str_replace是否與此preg_replace相同?

str_replace(array("\n", "\t", "\r", "\r\n"), '', trim($xml)); 

preg_replace('#>\s+<#', '><', $xml); 

如果不是,我該怎麼做preg_replace那樣?

預先感謝您。

+2

爲什麼你想用preg_replace替換str_replace?如果str_replace可以爲你做,就不要使用preg_replace。 – Nin

回答

4

preg_replacestr_replace(它只匹配尖括號外的空白)更受約束,而\s包含空格字符。此外,像<blah> \r \n \t TEXT \t\t</blah>這樣的字符串不會被替換,而是保留空白。

事實上,這兩者在某種程度上都不影響空白。

等效preg_replacestr_replace也只是('/[\r\n\t]/','',$xml)

+0

非常感謝。我想我應該堅持舊的'str_replace';然後;) – Peon

2

號舉例來說,如果你有這樣的:

<tag att="1" 
att="2" 
att="3">text</tag> 

它們會得到不同的結果。但是,如果我可以給出建議,不要使用正則表達式來達到此目的。

0

他們不是相似的,因爲:

  1. 正則表達式只處理括號之間的空格(我想這是因爲想你不想破壞XML?!)
  2. \ S也也將刪除「正常」的空白字符和其他non-printable characters(我認爲這是OK?)
  3. 的preg_replace正常工作在單線條,所以它可能是你還是換行之後 =>避免這種情況,使用"m" modifier

如果第一個變體適合你,那麼在我看來,它是更好的正則表達式。否則,這可能是搜索到的:

preg_replace('#>\s+<#m', '><', $xml);