私はいくつかのコードをサードパーティと統合するために取り組んでおり、私が書いている Javascript 関数に渡す文字列引数が を使用してエンコードされるencodeURIComponent
こともあれば、そうでないこともあります。
を使用してエンコードされているかどうかを確認する決定的な方法はありますかencodeURIComponent
?そうでない場合は、エンコードを行います
私はいくつかのコードをサードパーティと統合するために取り組んでおり、私が書いている Javascript 関数に渡す文字列引数が を使用してエンコードされるencodeURIComponent
こともあれば、そうでないこともあります。
を使用してエンコードされているかどうかを確認する決定的な方法はありますかencodeURIComponent
?そうでない場合は、エンコードを行います
それをデコードして、文字列がまだ同じかどうかを確認できます
decodeURIComponent(string) === string
特に文字列が 2 回エンコードされる可能性がある場合は、確実ではありません。
encodeURIComponent('http://stackoverflow.com/')
// yields 'http%3A%2F%2Fstackoverflow.com%2F'
encodeURIComponent(encodeURIComponent('http://stackoverflow.com/'))
// yields 'http%253A%252F%252Fstackoverflow.com%252F'
本質的に、渡された引数が実際にはエンコードされていないが、エンコードされた文字列の品質を持っているときに文字列のエンコードを検出しようとすると、すべきではないものをデコードすることになります。
定義「isURIComponent」に 2 番目のパラメーターを追加することをお勧めします。
ただし、試してみたい場合は、おそらく次のようにするとうまくいくでしょう。
if ( str.match(/[_\.!~*'()-]/) && str.match(/%[0-9a-f]{2}/i) ) {
// probably encoded with encodeURIComponent
}
これは、エンコードされない英数字以外の文字がそのままであること、および 16 進数が存在することをテストします (たとえば、スペースの場合は %20)。