2012-01-16 42 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)