0

私は他の場所から取得した値を保持するjavascript変数を持っています(API呼び出しから言ってみましょう)、取得された文字列は以下に与えられます、

He's the reason for this

この文字列を変数名「sample」に割り当てます。しかし、文字列に「 '」文字が含まれているため、印刷すると機能しません。「'」の前に「\」をつけたいです。これを使ってみたのですが、

var sample = (get the string from a api call).replace(/'/g,"\\\'");

しかし、うまくいきませんか?

4

3 に答える 3

1

私のjavascriptファイルではwindow.location.href = "test.php?detail="+sample;、データの送信に使用しています。

encodeURIComponentURIに挿入するための文字列をエスケープするために使用します。

私のtest.phpでは、とを使用$detail = $_GET["detail"];echo $detail;て印刷しています。

HTMLに印刷する場合は、を使用htmlspecialcharsして安全にします。

JavaScriptに印刷する場合は、を使用json_encodeして安全にします。

于 2012-08-16T14:44:52.157 に答える
0

あなたはエスケープ文字をやり過ぎています:

var sample = (get the string from a api call).replace(/'/g,"\\'");

十分です。二重引用符で区切られた一重引用符はエスケープする必要がないため、1つの円記号をエスケープするだけです。
ただし、補足として、チェックしている文字列が戻り値である場合、一重引用符は問題になりません(問題がある場合、文字列を返す前にAPIコードが壊れます)。あなたが本当に本当に本当に超メガシュアになりたいと思っていて、文字列が長い場合:

var sample = (get the string from a api call).split('\'').join('\\\'');
//or (to avoid confusion with all that escaping
var sample = (get the string from a api call).split("'").join("\\'");

長い文字列の場合は分割が高速になります(短い文字列ではなく、配列コンストラクターが呼び出されると、配列オブジェクトが作成され、ループされます...)

于 2012-08-16T14:41:19.923 に答える
0

おそらく問題は にあり(get the string from a api call)ます。次のようなサーバー側コード (PHP?) がある場合:

var sample = <?php echo $mystring ?>.replace(…);

…そして、次のようにブラウザに送信される出力を生成します。

var sample = 'my dad's car'.replace(…);

…サーバー側のコードが構文的に無効な JavaScript を生成し、これをさらに JavaScript で修正することはできません。代わりに、次のようにサーバー上で修正する必要があります。

var sample = <?php echo json_encode($mystring); ?>;

ただし、実際のコードの詳細がなければ、これ以上支援することはできません。

于 2012-08-16T14:52:49.010 に答える