2016-08-11 18 views
0

私はPHPページを読み込むとき、私はJavaScript関数の中に名前を入れます。問題は、この文字列に 'のような特殊文字がある場合に発生します。phpcoding特殊文字

ここで私は、クリックイベントのコードを貼り付けます。

showSocialShare(event, '<?php echo $object->slug; ?>', '<?php echo htmlspecialchars($object->title); ?>', '<?php echo $object->image; ?>') 

私は、文字列何とか機能はhtmlspecialcharsコードと思ったが、結果は次のとおりです。

showSocialShare(event, '4049269', 'collection-'Noun'', '/img/Original.jpg') 

見られるように、 2番目のパラメータでは、名前に 'などの文字が含まれ、エラーが発生します。

どうすればこの問題を回避できますか?

+0

出力はjavascript関数ですか? –

+0

はい、DOMに挿入されています。 – domoindal

答えて

1

PHPのテキストをJavascriptコンテキストに直接出力しません。あなたが探している通り、VERY JS構文エラーを簡単に生成できます。

常にjson_encodeを使用してください。与えられたこの

<?php $foo = 'bar'; ?> 

<script> 
    var badly_broken = <?php echo $foo ?>; 
    var working_fine = <?php echo json_encode($foo); ?>; 
</script> 

あなたは

<script> 
    var badly_broken = bar; // oops - undefined variable "bar" 
    var working_fine = "bar"; 
</script> 

で終わるそして、あなたは、HTML属性にJSを出力している場合、あなただけではなく、有効なJavascriptを生成する必要があることに注意してくださいよ、あなたは有効な出力を持っていますHTML AS WELL

<?php $foo = array('bar' => 'baz'); ?> 

<a onclick="brokenCall(<?echo json_encode($foo) ?>)"> 
<a onclick="workinCall(<? echo htmlspecialchars(json_encode($foo)) ?>)"> 

が生成する:

<a onclick="brokenCall({"bar":"baz"})"> 
      ^--start attribute 
         ^--end attribute - ruhroh 

<a onclick="workingCall({&quot;bar&quot;:&quot;baz&quot;}")> 
+0

私はhtmlspecialchars(json_encode($ my_string))を使用し、 '文字を保持しています。 – domoindal