0

私はencodeURIComponent()メソッドを使用してjavascriptでURLをエンコードしました..そのメソッドを使用して、一部の文字がエンコードされていません..- _を含むUrlのすべての文字をエンコードする方法またはコードを誰かが提案できますか
. ! ~ * ' ( ).ありがとうございます。

4

2 に答える 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 に答える