41

escape()関数は廃止され、encodeURIComponentに置き換えられましたが、encodeURIComponentは単一引用符/アポストロフィ文字をエンコードしません。AJAX形式で人の姓(たとえば「O'Neill」)のアポストロフィをエスケープする必要があります。彼らが改善しようとしていたものの能力をなぜ取り除くのでしょうか?

編集:

そのため、問題をより完全に説明するコード例を次に示します。ご覧のとおり、「O'Neill」という姓には、URL で変数を渡すときにエスケープする必要があるアポストロフィが含まれています。ただし、これはフォームの他の場所でも発生します。たとえば、入力された住所が「Billy's Tavern」の場合です。

<input id='surname' value="O'Neill">                        
<script>
var get_url = '?surname='+encodeURIComponent($('#surname').val());
$.ajax({
    url: get_url
});
</script>

カスタム関数を使用した私の現在のソリューション。私の質問は、カスタム関数が必要な理由を尋ねることでした。

<script>
function customEncodeURIComponent(URI) {
    return encodeURIComponent(URI).replace(/'/g, "%27");
}
</script>

<input id='surname' value="O'Neill">
<script>
var get_url = '?surname='+customEncodeURIComponent($('#surname').val());
$.ajax({
    url: get_url
});
</script>
4

5 に答える 5

11

これを試して

encodeURIComponent(str).replace(/'/g, "%27");

この/char/g構文は、文字列内のすべての出現箇所を置き換えるように JavaScript に指示します

于 2013-08-15T11:08:31.433 に答える
0

文字にも同じ問題があることがわかりました。それでうまくいきました"\

var replaceChars={ '\\':'\\\\' , '"':'\\"' };
encodeURIComponent(str.replace(/\\|"/gi, function(matched){
    return replaceChars[matched];
})),
于 2016-01-28T08:29:28.433 に答える
-3

これは私を助けます:

replace(/'/g, '%60')

%60 は ` ですが、どういうわけか一重引用符として定義されています。

于 2016-12-24T22:03:16.983 に答える