Bootstrapの折り畳みのhrefに特殊文字を使うにはエスケープもしくは置き換える必要がある

https://cccabinet.jpn.org/bootstrap4/components/collapse

上に書いてあるような折り畳み機能を仮にeach do内で使うとすると思わぬ動作不良が起きました。

本のシリーズ名をボタンにして、そこを押すとそのシリーズの本が出てくるというものを作っていたのですが、本のシリーズ名に ”.” が入ると、押しても本が出てきません。

結論を言うと、href等の指定をエスケープした文字にしておけば解決します。

<% escape_comic = comic.sub(/\./,"") %>

<a data-toggle="collapse" href="#collapse<%= escape_comic %>" role="button" aria-expanded="false" aria-controls="collapse<%= escape_comic %>">

ボタン部分のerbです。

comicというハッシュのキーに本のシリーズ名が出力されます。

それをまず一行目で”.”を消してあげています。

(もし他の特殊文字のせいで同じ症状が起こるかもしれませんが、今の所発見できていないので、とりあえずはこのドットの処理だけにしています)

あとはhrefやaria-controlsの指定をescape_comicを使って指定するだけです。

コンテンツ部分も同様に処理します。

実際に表示されるシリーズ名はドットを含めた文字になるので、見た目的には何ら問題はありません。