2024-06-28

HTML escape について。しょっちゅうわからなくなるので

  • エスケープする -> 特殊文字に変換する -> ブラウザで &lt;< で表示される
  • エスケープしない -> 特殊文字に変換しない -> ブラウザで < がそのまま表示される -> <br> を HTML タグとして解釈する

【初心者必見】htmlのエスケープの必要性と書き方 - WEBCAMP MEDIA

safe_join

https://api.rubyonrails.org/classes/ActionView/Helpers/OutputSafetyHelper.html#method-i-safe_join

HTML safe じゃない文字列もエスケープされ、HTML safe としてマークされてしまう

tag helper

https://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-tag

HTML tag を返す

> text = "#{'a' * 37}"
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> max_length = 36
=> 36

# escaped ブラウザで <br> がそのまま表示される
# 特殊文字、なんか意味のある文字なんだなということで変換されて表示される
> helper.safe_join text.to_s.scan(/.{1,#{max_length}}/), '<br>'
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;br&gt;a"

# not escaped (HTML tag)
# HTML tag としてブラウザでは「改行」として解釈される
> helper.safe_join text.to_s.scan(/.{1,#{max_length}}/), helper.tag.br
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>a"