6

私はいくつかのコードをサードパーティと統合するために取り組んでおり、私が書いている Javascript 関数に渡す文字列引数が を使用してエンコードされるencodeURIComponentこともあれば、そうでないこともあります。

を使用してエンコードされているかどうかを確認する決定的な方法はありますかencodeURIComponent
?そうでない場合は、エンコードを行います

4

2 に答える 2

7

それをデコードして、文字列がまだ同じかどうかを確認できます

decodeURIComponent(string) === string
于 2013-10-29T05:47:26.653 に答える
2

特に文字列が 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)。

于 2013-10-29T05:40:11.863 に答える