我的数据库中保存了一个 HTML 文档,如下所示:
\\u003cp style=\\\"text-align: center; opacity: 1;\\\"\\u003e\\u003cstrong\\u003e\\u003cspan style=\\\"font-size: 18pt;\\\
我知道,这很丑陋,我知道,这不是理想的方式,但这是一个遗留系统。
我的任务是获取所有这些 HTML 并将它们转换为 Google Docs 中的文档。实际上,Google Docs 可以很好地将 HTML 解析为其内部格式,但 HTML 需要是有效的 HTML,<p>
而不是\\u003cp
.
我正在尝试将此字符串转换/解码/解析/转换为有效的 HTML,但到目前为止,没有任何运气。
htmlentities gem、CGI 解码等Nokogiri::HTML.parse
,JSON.parse
但它们都没有完成这项工作。
我也尝试过,string.encode(xxxx)
但也没有运气。我真的希望这种.encode
方法能做到,但我无法让它工作,也许我使用了错误的编码?(我尝试使用所有ISO-xxx
编码)
这里有一个快速的解决方法:
input_string.gsub(/\\u(\h{4})/) { [$1.to_i(16)].pack('U') }
使用上面给出的示例输入,结果如下:
"<p style=\\\"text-align: center; opacity: 1;\\\"><strong><span style=\\\"font-size: 18pt;\\"
解释:
\u003c == <
. 左侧是转义的 unicode 字符;这与\\u003c
, 是一个字面反斜杠不同,后跟u003c
.
正则表达式\\u(\h{4})
将匹配任何出现的 this (\h
代表“十六进制”,相当于[0-9a-fA-F]
),Array#pack
并将二进制序列转换为(在这种情况下)一个 UTF-8 字符。
当然,理想情况下,您应该从根本上解决问题,而不是像这样改造解决方法。但是,如果这超出了您的控制范围,那么解决方法就足够了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句