2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Wordpressで「&」が含まれる記事タイトルをURLエンコードするときに気を付けること

Last updated at Posted at 2020-06-11

eyecatch.png

Wordpressのカスタマイズで記事のタイトルをURLエンコードしようとしたところ、タイトルに「&」が含まれる記事がうまくエンコードされない事案に悩まされました。
紆余曲折の末、HTMLエンコードされた文字列をURLエンコードしようとしていたのが良くなかったということが分かりました:cold_sweat:

HTMLエンコードとURLエンコード

フロント側ではHTMLエンコードとURLエンコードをよく使うかと思います。
ここで、両者の違いを再確認してみましょう:book:

HTMLエンコード

HTMLで特殊文字をブラウザで出力する場合に使われるエンコードです。
&●●;のような出力結果になります。

URLエンコード

URLのパラメータなどに2バイト文字や特殊記号が含まれる場合に使われるエンコードです。
%●●のような出力結果になります。

「Love&Peace」というタイトルの記事でget_the_title();を呼び出すと…

get_the_title();は管理画面で入力した記事のタイトルがそのまま返ってくるという認識だったので、当然Love&Peaceが出力される思っていまいた。
しかし、実際はHTMLエンコードされるのでLove&Peaceが正解です。

つまり、Love&PeaceをURLエンコードした結果が欲しかったのに、Love&PeaceをURLエンコードしようとしていたのが原因でした。

#たどり着いた解決策はこれ!

echo urlencode(html_entity_decode(get_the_title()));

今回エンコードしたいのはLove&PeaceではなくLove&Peaceなので、URLエンコードする前に&&にする必要がありました。

このコードでやっていることは以下のようなことです。

1.html_entity_decodeを使ってHTMLエンコードされた文字列を一旦デコードする(&&)
2.urlencodeを使って1.をURLエンコードをする(&%26)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?