お知らせ
2023.12.5(Tue)
目次
こんにちは。堀部です。
URLエンコードやデコードする際に記号や半角スペースが含まれるとき、うまくデコードできなかったり半角スペースが「+」になったりしていました。いろいろ調べてみましたので、記事にまとめてみたいと思います。
URLエンコードとはURL/URIのファイル名やクエリ文字列などの一部としては使用できない記号や文字を、使用できる文字の特殊な組み合わせによって表記する変換規則のことです。
%(パーセント)を付けた16進数表記されることからパーセントエンコーディングとも呼ばれます。変換される対象の文字は日本語や記号が主に該当します。
デコードはその逆で16進数表記から元の文字に変換することです。
Java標準のjava.net.URLEncoderを使用することが多いかと思います。
String str = URLEncoder.encode(str, "UTF-8");
String str = URLEncoder.encode(str, "UTF-8").replace("+", "%20");
JavaScriptではencodeURI関数でエンコードしますが、この関数では一部の記号がエンコードされません。対象となる記号は ;,/?:@&=+$# になります。
これらの記号もエンコードしたい場合は、encodeURIComponent関数を使用します。ただし、-_.!~*'() これらの記号はencodeURIComponent関数でもエンコードされません。
encodeURI(";,/?:@&=+$#-_.!~*'()") encodeURIComponent(";,/?:@&=+$#-_.!~*'()")
<出力結果>
“;,/?:@&=+$#-_.!~*'()”
“%3B%2C%2F%3F%3A%40%26%3D%2B%24%23-_.!~*'()”
いかがでしたでしょうか。
使用する言語や変換方法によってルールが異なることもあるので、違いをしっかりと認識しておくことも重要ですね。