私はencodeURIComponent()メソッドを使用してjavascriptでURLをエンコードしました..そのメソッドを使用して、一部の文字がエンコードされていません..- _を含むUrlのすべての文字をエンコードする方法またはコードを誰かが提案できますか
. ! ~ * ' ( ).ありがとうございます。
質問する
53 次
2 に答える
1
独自のエンコードおよびデコード関数を作成できます。
function encodeString(s) {
var result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push('%' + s.charCodeAt(i));
}
return result.join('');
}
function decodeString(s) {
s = s.split('%');
result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push(String.fromCharCode(s[i]));
}
return result.join('');
}
var s = "- _ . ! ~ * ' ( )";
alert(encodeString(s)); // %45%32%95%32%46%32%33%32%126%32%42%32%39%32%40%32%41
alert(decodeString(encodeString(s))); // - _ . ! ~ * ' ( )
編集
上記は base 10 でエンコードされているようですが、encodeURIComponent は base 16 でエンコードされているようです。
function encodeString(s) {
var result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push('%' + s.charCodeAt(i).toString(16));
}
return result.join('');
}
function decodeString(s) {
s = s.split('%');
result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push(String.fromCharCode(parseInt(s[i], 16)));
}
return result.join('');
}
alert(encodeString(s)); // %2d%20%5f%20%2e%20%21%20%7e%20%2a%20%27%20%28%20%29
1 つ目は IE 8 で正しくデコードできませんでした。修正する時間がなく、現在 IE を利用できません。デコードに使用する基数を確認するには、機能テストが必要になる場合があります。
于 2013-03-15T06:12:54.087 に答える
0
このencodeURIComponent
メソッドは、URL の「部分」 (コンポーネント) でのみ使用する必要があります。これは、ユーザー提供または計算されたフラグメントから URL を構築するときに、クエリ文字列またはパスをまとめるためのものです。
一般的な「URL を適切にエンコードする」方法はあり得ません。URL のどの部分をエンコードし、エンコードしたくないかがわからないためです。代わりに、最終的な文字列に追加する前にencodeURIComponent()
、まとめている URL の部分で使用してください。
于 2013-03-15T05:42:15.570 に答える