@ars42525 こんな感じで、タグとテキストをばらして個別処理。アンカーの中を変換しないようにしたり、ショートコードを変換しないように回避したりしてる。
https://github.com/fedibird/mastodon/blob/cfc7143b32bc01ac6ef15045dc16438ef749aaec/app/lib/formatter.rb#L215-L251
@noellabo これは大変だぁ…
HTMLでやり取りしたり保管したりするの、こういう処理しようとすると露骨に弊害が…
@ars42525 まぁ構文エラーがないという前提ならこのぐらいのコードでいいだろって感じだけど、何が来るかわからない想定だともう少し真面目にかかないと……w
@noellabo そもそも壊れたHTML投げたらMastodonってどうなるのかしら…
@ars42525 そうね……サニタイズとはまた違うが……まぁ、投げてみればわかるかなw
@noellabo 任意のコンテンツを送信するActivityPub実装が欲しくなってくるやつじゃん
@ars42525 Formatter.instance.reformatで
sanitize(html, Sanitize::Config::MASTODON_STRICT)
っての呼んでて、ここでbrokenなhtmlを投げても綺麗に成形してくれるね。なかなか強い。
Formatter.instance.reformat('<p>abc')
=> "<p>abc</p>"
Formatter.instance.reformat('<p>a<a href="https://fedibird.com">bc</p>')
=> "<p>a<a href=\"https://fedibird.com\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">bc</a></p>"
@noellabo 勝手に直しちゃうのすごい
そういえばブラウザのHTMLパーサーもそんな処理してたわね
@noellabo 一回やりかけた気はするんだけどリンクがどうこうみたいな問題が発覚した気がするんだよね