2011-02-09 102 views
1

在我的XML文件中,有一些unicode換行符,如下圖所示。 使用此鏈接見截圖用BR替換unicode換行符

bigger screenshot

兩個點後,「心有靈犀」。是換行符。我用Google搜索了幾乎所有我知道用紅寶石代替它們(1.8),但沒有任何運氣。

這是我的代碼(用不同的unicodes嘗試),也許有人可以幫助我。

def formatedBody 
    t = self.body.gsub("\u000a","<br/>") 
    t = t.gsub("\u000d","<br/>") 
    t = t.gsub("\u0009","<br/>") 
    t = t.gsub("\u000c","<br/>") 
    t = t.gsub("\u0085","<br/>") 
    t = t.gsub("\u2028","<br/>") 
    t = t.gsub("\u2029","<br/>") 
    t = t.gsub(/0A\0A/u,"<br/>") 
    return t 
end 
+1

也嘗試`/ \ r?\ n /,「
」`。 – Nakilon 2011-02-09 21:08:38

回答

4

這兩個0x0A值是換行符的十六進制表示形式。常規OL'ASCII行提要,AKA "\n\n"在一個字符串中。

因此,t = t.gsub(/\n/, "<br/>")應該工作。

t = "foo\u000d\u0009\u000c\u0085\u2028\u2029\nbar" 
p t 

t = t.gsub(/\u000d|\u0009|\u000c|\u0085|\u2028|\u2029|\n/,"<br/>") 
puts t 

可以更換的與邏輯與的字符列表:

t = t.gsub(/[\u000d\u0009\u000c\u0085\u2028\u2029\n]/,"<br/>") 

無論哪種方式,輸出將如下所示:

"foo\r\t\f\u2028\u2029\nbar" 
foo<br/><br/><br/><br/><br/><br/><br/>bar 

的原因,你的

t = t.gsub(/0A\0A/u,"<br/>") 

不起作用的是正則表達式不是正確的。

t = t.gsub(/\x0A/,"<br/>") 

是限定的替代方法:

t = t.gsub(/\n/,"<br/>") 
+0

thanx男人!你保存了我的頭髮;)OR'd solutiuon就像一個魅力! – ghostrifle 2011-02-10 05:35:12

0

我有(使用紅寶石1.8.7)和I簡單地解決這個問題同樣的問題:

t = t.gsub(/\xE2\x80(?:\xA8|\xA9)/, '<br/>')