2013-03-30 18 views
1

我知道這可能是一個很簡單的問題,但我仍然沒有找到一個解決方案XML內容之前... 好吧,我會很簡短: 假設有這麼一個結構化的XML文件:與<br>更換 打印使用SimpleXML

<root><item><text>blah blah blah&#xD;blah blah blah&#xD;blah blah blah&#xD;...</text></item></root> 

我的XML顯然更爲複雜,但因爲我的問題是,這並不重要: 如何更換那些&#xD;用,例如,HTML標籤<br>

我使用SimpleXML來讀取XML數據和嘗試:

echo str_replace("&#xD;", "<br>", $message->text); 

,甚至與:

echo str_replace("\n", "<br>", $message->text); 

,但沒有...

我需要使用的SimpleXML爲了這。

回答

6

&#xD;表示ASCII 「回車」 字符(ASCII碼13,它是十六進制D),有時寫作"\r",而不是 「換行」 的字符,"\n"(這是ASCII 10,或A,十六進制)。請注意,如果要求SimpleXML輸入節點的字符串內容(使用(string)$node或隱含地使用類似echo $node的語句),它會將此「實體」轉換爲它所表示的實際字符。

根據您的平臺(Windows,Linux和MacOS的,等等),在標準行結束,通過訪問內置的不斷PHP_EOL,將是要麼"\n""\r\n",或"\r"

替換這些與HTML斷行標記(<br>)最安全的辦法是更換這些字符中的任何,因爲你不知道XML數據的可能已被使用,其約定。

PHP有一個內置的功能,應該可以爲你做這個,叫做nl2br()。如果你想要一個稍微定製的版本,在「ngkongs」的文檔中有一個評論,說明如何使用str_replace來達到類似的效果。

+0

所以'echo nl2br($ message-> text);'會是一個更好的解決方案,而且它看起來絕對是最好的解決方案。我會加入並接受你的答案作爲我的問題的答案。 – danicotra

+0

請不要錯過http://www.w3.org/TR/REC-xml/#sec-white-space和* 2.11行尾處理*,它直接在該鏈接上。 – hakre

1

我想通了如何解決只是發表我的問題是這樣,在已經寫之前,我將分享這個希望會是別人遲早有用...

該做的伎倆:

echo str_replace(PHP_EOL, "<br>", $message->text); 
+0

如果有人認爲會有更好的解決方案,請告訴我 – danicotra

+1

只有當您的平臺對行結束符('PHP_EOL')的定義恰好與生成XML的平臺相匹配時,纔會起作用。 – IMSoP