Hugo

[Hugo]plainify関数で<br>を消した際に改行コードが入ってしまう問題

plainify関数とは

plainify - 公式ドキュメント - 文字列からHTMLタグを削除してプレインテキストを返す関数

{{ "<b>BatMan</b>" | plainify }} → "BatMan"

このようにHTMLタグが取り除かれた状態の文字列が返ってくる

今回の問題

{{ "Bat<br>Man" | plainify }} → "Bat\nMan"

このように<br>を入れると削除ではなく\nに置換された状態で返ってくる

解決策

色々調べたがHugoにあまり詳しくないせいか単純な解決策は見つからなかった

今回は<br>さえ消えてくれればよかったので

{{ replace "Bat<br>Man" "<br>" "" }} → "BatMan"

replace関数で<br>を空文字列に置換する事で対処した

綺麗に解決できる方法ご存知の方がいればぜひコメントお願いします!

追記

ソースコード見てたら

https://github.com/gohugoio/hugo/blob/master/helpers/content.go#L137

content.go

var stripHTMLReplacer = strings.NewReplacer("\n", " ", "</p>", "\n", "<br>", "\n", "<br />", "\n")

こういう一行が処理にあったのでHTMLは全部消す(但し、これらは例外的に以下のように置換処理)って関数として納得するしか無いと思います... オプションとか無いし...

"\n" => " "
"</p>" => "\n"
"<br>" => "\n"
"<br />" => "\n"