[英]how to decode UTF-8 to HTML tags
我在數據庫中保存了一個HTML文檔,如下所示:
\\u003cp style=\\\"text-align: center; opacity: 1;\\\"\\u003e\\u003cstrong\\u003e\\u003cspan style=\\\"font-size: 18pt;\\\
我知道,這很丑陋,我知道,這不是理想的方式,但這是一個遺留系統。
。
我的任務是獲取所有這些HTML,並將它們轉換為Google文檔中的文檔。
實際上,Google文檔可以很好地將HTML解析為其內部格式,但是HTML必須是有效的HTML,使用
<p>
而不是\\\
我正在嘗試將此字符串轉換/解碼/解析/轉換為有效的HTML,但是到目前為止,沒有任何運氣。
我已經嘗試過的事情
htmlentities gem,CGI解碼,
Nokogiri::HTML.parse
和JSON.parse
,但它們都沒有完成這項工作。
我也嘗試過
string.encode(xxxx)
但也沒有運氣。 我真的希望.encode
方法可以做到,但我無法使其正常工作,也許我使用的編碼錯誤? (我嘗試使用所有ISO-xxx
編碼)
使用Array#pack
:
string = "\\u003cp style=\\\"text-align: center; opacity: 1;\\\"\\u003e\\u003cstrong\\u003e\\u003cspan style=\\\"font-size: 18pt;\\"
string.gsub(/\\u(....)/) { [$1.hex].pack("U") }
# => "<p style=\\\"text-align: center; opacity: 1;\\\"><strong><span style=\\\"font-size: 18pt;\\"
這是為您提供的快速解決方法:
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;\\"
說明:
\< == <
左側是轉義的unicode字符; 這與\\\<
,后者是字面反斜杠,后跟u003c
。
正則表達式\\\\u(\\h{4})
將匹配該表達式的任何出現( \\h
代表“十六進制”,並且等效於[0-9a-fA-F]
),並且Array#pack
轉換二進制序列(在這種情況下)轉換為UTF-8字符。
當然,理想情況下,您將從根本上解決問題,而不是重新設計這樣的解決方法。 但是,如果那超出了您的控制范圍,則必須有一種解決方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.