簡體   English   中英

如何將UTF-8解碼為HTML標簽

[英]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.parseJSON.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM