私の会社のアプリのユーザーに送信するダイジェストメールに取り組んでいます。このために、各ユーザーの電子メールを調べ、各電子メールに関する基本情報(発信元、件名、タイムスタンプ、および難易度の高いイメージ、イメージ)を見つけようとしています。エンコードされたHTMLを解析する方法
Nokogiriのsearch('img')
機能を使用すると、画像を引き出すのに問題はないと想定しました。残念ながら、ほとんどの電子メールには何らかの理由で改行(「\ n」)、エスケープ文字(「\」)、文字列「3D」などの画像のURLに多くのゴミが埋め込まれているようです。たとえば:
#(Element:0x3fd0c8e83b80 {
name = "img",
attributes = [
#(Attr:0x3fd0c8e82a28 { name = "src", value = "3D%22https://=" }),
#(Attr:0x3fd0c8e82a14 { name = "d3ui957tjb5bqd.cloudfront.net", value = "" }),
#(Attr:0x3fd0c8e82a00 { name = "width", value = "3D\"223\"" }),
#(Attr:0x3fd0c8e829ec { name = "heigh", value = "t=3D\"84\"" }),
#(Attr:0x3fd0c8e829d8 { name = "alt", value = "3D\"Creative" }),
#(Attr:0x3fd0c8e829c4 { name = "market", value = "" }),
#(Attr:0x3fd0c8e829b0 { name = "border", value = "3D\"0\"" })]
})
誰もがなぜこれが起こっているのアイデアを持っていて、このすべてを削除する方法:
<img src=3D\"https://=\r\nd3ui957tjb5bqd.cloudfront.net/images/emails/1/logo.png\"
これは、実際のURL/SRCのの部分を引き出すに検索を引き起こしていますジャンク?
私はgsub
と安全性チェックがたくさんありますが、まともな結果を得ていますが、かなり気分が悪いと感じています。
私もSanitize.clean
が動作していないし、 "How to sanitize html string except image url?"に記載されているPermitScrubberを試しました。
@mattが以下に述べたように、コンテンツはコード化されています。これはNokogiriの問題ではなく、テキストが折り返され、古いメールルーターに収まるように行の継続が追加され、再構築された結果です。これはあなたが気づいて、それを解く方法を決めてから、きれいになったテキストをNokogiriに渡すことです。この種の問題は、埋め込まれたHTMLが埋め込まれたHTML、ひどく書式が設定されたマークアップ、複数の言語でエンコードされたエンコードされていないマルチバイト文字など、インターネット上で発生します。それはインターネットジャングルの人生です。 –
解説ありがとう – SomeSchmo