おーしまブログ

プログラミングやってます

<rails><javascript>「#」(%23)(ハッシュタグ)が認識できない時の解決策

こんにちは、おーしまです。

今回は、私が作成中のアプリで、ハッシュタグ(#)が認識できないことがあったので、その解決策をご紹介します。

内容としては、タグの検索機能で、フォームにタグ名を打ち込んで検索する際に、逐次検索機能を実装して、以下のようにフォームの下に「このタグをお探しですか?」という感じで、出力するといったものです。
f:id:tomo_bb_aki0118115:20201104225011p:plain

これは、フォームに文字を打ち込むたびに、その文字が含まれるタグをtagsテーブルから検索しているのですが、#を普通に打ち込んでも、#は#として扱われません。以下のように、データベースにタグが保存されている状態で、「#」を打ち込んでも、逐次検索できずにいました。
f:id:tomo_bb_aki0118115:20201104230311p:plain


私も困ってgoogle検索しまくっていたのですが、なかなか良い記事が見当たりませんでした。そのとき、googleのURLを見ると、、
f:id:tomo_bb_aki0118115:20201104230745p:plain
このようになっていました。
この時、googleで「rails #」で検索していたので、「#」が「%23」になっているのではないかと思い、formに入力すると、、
f:id:tomo_bb_aki0118115:20201104231153p:plain
まじか。

このように、「#」は「%23」となって送られていることが分かりました。
ちなみに「%」は「%25」になっていました。
ちゃんと調べていないので、私の憶測ですが、新規登録の際のタグのフォームで「#かっこいい」と入力して、「#かっこいい」で、ちゃんと保存できているので、JavaScriptjsonで通信した際に書き変わるのだと思います。

よって、

    if (keyword.match( /#/ )) {
      keyword = keyword.replace("#", "%23");
    }

フォームに「#」が入力された時は、「#」を「%23」に置き換えると、できるようになりました。


#は特殊文字なのかな?
調べても出てこなかったので、分かりませんが、とりあえずできて良かったです。
私と同じように、この問題で詰まっている人のために、ブログタイトルは検索されやすいようにしたよ!

今回は、ここまでです。
それではまた〜

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}