2012-01-16 44 views
1

有沒有辦法在Ruby中使用gsub(或其他)來代替一個字符串與其十六進制等效?在MySQL中你會做這樣的事情:紅寶石替換與十六進制等效的HTML實體

self.connection.execute("UPDATE `dvd_actor` SET actor = replace(actor, '&pound,', CHAR(163));") 

我在Rails的重寫本,並使用GSUB,這樣的事情:

self.actor = actor.gsub(/£/, "£").strip if actor =~ /£/ 

但我已經把所有與十六進制寫的行字符和我試圖避免找出哪些字符是哪些(其中一些需要複製/粘貼,因爲我沒有在英文鍵盤中)。

我想這(我在後在這裏看到的):

actor.gsub(/"/) { "0x134".hex } if actor =~ /"/ 

但是,這並不做的伎倆,它產生的一個數字。

或者更好的是,也許有一個寶石已經這樣做?基本上採取HTML值並解決它們?哦,那很好。

+3

0x134「.hex.to_s(16)'做成了嗎? – philant 2012-01-16 16:44:43

回答

0

我會嘗試"0x134".hex.to_s(16)。它將「0x134」轉換爲「134」。

+0

就是這樣,結果必須是字符串,而不是數字。這是十六進制中該字符的值。字母表中的每個字母都有一個十六進制值,我需要將該值轉換爲字符串。例如,小寫的'a'是十六進制62:http://www.asciitable.com/ – kakubei 2012-01-16 17:13:09

0

我相信我發現它:一個名爲htmlentities的寶石應該做我想要的。所以我有這個:

ampersands = where("actor LIKE ?", "%&%;%") 
ampersands.each do |actor| 
    fixed_actor = fixer.decode(actor.actor) 
    self.update(actor.id, :actor => fixed_actor)