Skip to content

リンクカードバグ:特定のURL / ドメインのリンクカードが文字化けする #9758

Description

@mousu-a

概要

下記URLのリンクカードが文字化けする。youtubeの動画は全て文字化けする。
@[card](https://www.youtube.com/watch?v=w1JPVRwNhaE)

Image

バグの発生箇所

現在リンクカード処理内部でNet::HTTPを使ってURLにGETリクエストしているが、そこでencodingを明示的に指定していないのが原因。
Net::HTTPインスタンスのresponse_body_encodingはデフォルトでASCII-8BITとなっている。

https://github.com/ruby/ruby/blob/master/lib/net/http/response.rb#L246

ASCII-8BITはエンコーディング状態不明を表すEncodingオブジェクトであり、この状態のHTMLを(Gem内部で)Nokogiriに渡すことで文字化けしてしまう。

https://docs.ruby-lang.org/ja/latest/method/Encoding/c/ASCII_8BIT.html
https://techracho.bpsinc.jp/hachi8833/2018_07_02/58408

バグへの対策

Net::HTTPインスタンスを作成し、encodingを明示的に設定、その後GETリクエストを送るようにする。
参考: https://github.com/huyha85/opengraph_parser/pull/24/changes#diff-195c4daf411527ad371e957266022db77685731bd9caeff4a29e14f4a9defea2R28

期待される振る舞い

文字化けせず、正しくリンクカードが展開される

関連Issue

Ref: #9757, #7455

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions