Python

勝手に斜字すんな!!! ~HTML表示の罠~

どうも、yujinです。

突然ですが、予期せぬエラー、皆さんも経験あるのではないでしょうか。
私も多くの時間を取られました……

今回は、私の年の瀬の時間を貪った
Webページで_(アンダーバー)が勝手に斜字変換されることへの対応
についてです。
(この程度のこと、端から気をつけておけという方はぜひコメントください!)

事の発端

私は、Streamlitを用いたデータカタログのアプリを担当していたのですが、その表示がうまくいかなくなりました。
本来なら、画像の左のようにテーブルの情報がカードとしてきれいに表示されるはずが、右のようにカードの表示が崩れてしまう状況に見舞われました。

弊社プロダクトのデータベースのカタログ

原因解析

テーブル名に含まれている「_」が影響したものでした。アンダーバーですね。
マークダウンにおけるアンダーバーは斜体による強調の意味を持ちます。Streamlitでの表示の際のコードがst.markdownであることから、アンダーバーが強調文字として認識されたと考えられます。(アンダーバーは必ず強調文字として認識されるわけではなく、文字として認識されることもあるようです)

ただ、データベースの命名においてアンダーバーはよく使われる記号です。当然、アンダーバーが用いられる前提の対応が必要でした。反省……

各文字列に斜字が適用されている

対処法

HTML用の文字列のうち、該当するHTML特殊文字をコードベースに変換しておくことで、正常に表示されるようになります。
今回で言えば、以下のコードのように「_」の部分を「_」に変化することで対応が可能です!

script_HTML = "<body></body>"#HTML文

script_HTML = script_HTML.replace('_', '_')
斜字も解消され、カードの表示も完璧に

まとめ

「このエラーどうなってんだ、全然解決できない」と思っていたら、意外と単純なところに落とし穴がある、その予兆を見逃してしまう、そんなあるあるを見事に犯してしまいました。
皆さんもお気を付けください。

yujin
『解像度を上げる』