如何在Ruby中取消JavaScript字符串

时间:2014-03-31 21:10:13

标签: ruby ruby-1.9

在Ruby中浏览以下字符串的最简单方法是什么。

示例输入

str = "\\u003Cul id=\\\"list_example\\\"\\u003E\\n\\t\\u003Cli class=\\\"item_example\\\"\\u003EHello\\u003C/li\\u003E\\n\\u003C/ul\\u003E\\n\\n"
puts str # => \u003Cul id=\"list_example\"\u003E\n\t\u003Cli class=\"item_example\"\u003EHello\u003C/li\u003E\n\u003C/ul\u003E\n\n
str.encoding # => #<Encoding:UTF-8>

期望输出

puts str #=>
<ul id="list_example">
  <li class="item_example">Hello</li>
</ul>

2 个答案:

答案 0 :(得分:2)

最简单的方法是将字符串作为JSON字符串读取。

unescaped_str = JSON.load("\"#{str}\"")

答案 1 :(得分:2)

该字符串被转义两次。有几种方法可以解决它。最简单的是eval,但如果你不信任输入则不安全。但是,如果您确定这是由ruby编码的字符串:

print eval(str)

更安全的:

print YAML.load(%Q(---\n"#{str}"\n))

如果它是由javascript转义的字符串:

print JSON.load(%Q("#{str}"))

另见Best way to escape and unescape strings in Ruby?