JavaScriptのURIのエンコードとデコードのサンプルです。
encodeURIComponent関数とdecodeURIComponent関数を使用します。
目次
サンプル | エンコードする(encodeURIComponent) |
元の文字列に戻す(decodeURIComponent) | |
encodeURIComponent関数とencodeURI関数の違い | |
escape関数 |
エンコードする(encodeURIComponent)
encodeURIComponent ( 文字列 ) |
- エンコードを行います。
- 文字列を渡すと、URIエンコードされた文字列が返ります。
- 次の文字は変換しません 。
A-Z a-z 0-9 - _ . ! ~ * ' ( ) - URLの末尾にパラメータ(クエリ文字列)を付ける時にエンコードします。
クエリ文字列の例:testform.php?text1=a&text2=b
パラメータ(クエリ文字列)とは、URLの末尾に?が付き、「名前=値」の形式です。値が複数ある場合は「&」でつなげます。送信する文字列に?や=や&があるとフォーマットが壊れることや全角の文字等は送れないためエンコードします。 - 注意点としてスラッシュ(/)やコロン(:)は変換されます。
例えばhttp://example.comを変換した場合、://の部分も変換されてしまいます。 - 以下はMDNのencodeURIComponent()のリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
エンコードするサンプルです。
<script>
const str1 = 'あいAB1212';
console.log(encodeURIComponent(str1));
// %E3%81%82%E3%81%84AB12%EF%BC%91%EF%BC%92
const str2 = 'a1-_.!~*\'()?:#$&=';
console.log(encodeURIComponent(str2));
// a1-_.!~*'()%3F%3A%23%24%26%3D
</script>
8行目のアルファベット、10進数字、- _ . ! ~ * ' ( ) は、変換されていません。
元の文字列に戻す(decodeURIComponent)
decodeURIComponent ( encodeURIComponentでエンコードされた文字列 ) |
- encodeURIComponent関数でエンコードされた文字列を元の文字列に戻します。
- 以下はMDNのdecodeURIComponent()のリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent
元の文字列に戻すサンプルです。
<script>
const str1 = "%E3%81%82%E3%81%84AB12%EF%BC%91%EF%BC%92";
console.log(decodeURIComponent(str1)); // あいAB1212
const str2 = "a1-_.!~*'()%3F%3A%23%24%26%3D";
console.log(decodeURIComponent(str2)); // a1-_.!~*'()?:#$&=
</script>
6行目のencodeURIComponent関数で変換されていない文字(a1-_.!~*'())は、そのまま出力されます。
encodeURIComponent関数とencodeURI関数の違い
encodeURI関数は、次の文字を変換しません 。
赤字の部分がencodeURIComponent関数との違いです。
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # |
スラッシュ(/)やコロン(:)は変換されないので
例えばhttp://example.comを変換した場合でも、://の部分は変換されません。
encodeURI関数のコードです。
<script>
const str1 = 'あいAB1212';
console.log(encodeURI(str1));
// %E3%81%82%E3%81%84AB12%EF%BC%91%EF%BC%92
const str2 = 'a1-_.!~*\'()?:#$&=';
console.log(encodeURI(str2));
// a1-_.!~*'()?:#$&=
</script>
8行目は、変換されていません。
escape関数
escape関数も変換する関数ですが、現在は非推奨(Deprecated)になっています。
以下は、MDNのescape関数のリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/escape
関連の記事
以下のページで試すことができます。
URLエンコードとURLデコードを行うWebツール