2

GETajax呼び出しを介していくつかの16進色をphpスクリプトに渡そうとしています。PHPは16進色を好まないようですが、私はを置き換えて#encodeURIComponentどちらも機能しないようにしようとしました。

これがjsです(各currentColorsエントリは16進色です)

var dataString = 'designName=test&mc1='+currentColors[1]+'&mc0='+currentColors[0]+'&sp='+currentColors[2];
var strippedString = encodeURIComponent(dataString);
4

2 に答える 2

4

encodeURIComponentURIコンポーネントのエンコードに使用:

var strippedString = 
    "designName=test" + 
    "&mc1=" + encodeURIComponent(currentColors[1]) +
    "&mc0=" + encodeURIComponent(currentColors[0]) +
    "&sp="  + encodeURIComponent(currentColors[2]);

例:

var strippedString = 
    "designName=test" + 
    "&mc1=" + encodeURIComponent("#FF0000") +
    "&mc0=" + encodeURIComponent("#00FF00") +
    "&sp="  + encodeURIComponent("#0000FF");
// "designName=test&mc1=%23FF0000&mc0=%2300FF00&sp=%230000FF"

サーバー側では、クエリ文字列は次のようになります。

// parse_str("designName=test&mc1=%23FF0000&mc0=%2300FF00&sp=%230000FF", $my_GET);
// var_dump($my_GET);

array(4) {
  ["designName"]=>
  string(4) "test"
  ["mc1"]=>
  string(7) "#FF0000"
  ["mc0"]=>
  string(7) "#00FF00"
  ["sp"]=>
  string(7) "#0000FF"
}
于 2012-12-19T09:17:00.987 に答える
0

あなたはこれを行うことができます:

var strippedString = dataString.split('#').join('');

次に、サーバー側で'#'、パラメーターの前に再度追加します。


.split('#')文字列を次の文字で配列に分割します'#'

var s = 'designName=test&mc1=#FF0000&mc0=#FFFFFF&sp=#FF00FF';
var a = s.split('#');
console.log(a);
//["designName=test&mc1=", "FF0000&mc0=", "FFFFFF&sp=", "FF00FF"]

.join('')次に、この配列を再び結合します。

var s = a.join('');
console.log(s);
//'designName=test&mc1=FF0000&mc0=FFFFFF&sp=FF00FF'

.join(''):でプレースホルダー/置換文字列を使用することもできます。

var s = a.join('%');
console.log(s);
//'designName=test&mc1=%FF0000&mc0=%FFFFFF&sp=%FF00FF'

または、Salman A が回答encodeURIComponentしたように、コンポーネントでのみ使用してください。(これは、私が提案したような配列関数よりも間違いなく高速です)

于 2012-12-19T09:13:10.893 に答える