2016-10-01 5 views
0

JavaScript関数にいくつかのPHP変数を送信するonclick関数のボタンがあります。これは、テキスト内に 'がある場合を除いて、すべて正常に動作します。PHP変数をJavaScriptに特殊文字で渡す

ので、私はボタンを

<button onclick=\"selected_comp('" . preg_replace("/\r|\n/", "", $comp_row['comments']) . "')\" 

を持っているでしょうし、私は私がにpreg_replaceとjson_encodeを試してみましたが、両方は私にエラーを与える(json_encodeは、一般的にとして私にエラーを与える関数

function selected_comp(comments){ 
console.log(comments); 
} 

を持っているでしょうpreg_replaceこれはほとんどの場合動作しますが、この文字がコメントの中にあるときはいつも動作しません。どのような文字が内部にあるものであれ、平易なテキストとして扱われるようにするにはどうすればいいですか?

error: (index):1 Uncaught SyntaxError: Invalid or unexpected token

答えて

3

$comp_row['comments']のテキストがtextであるならば、結果のJSコードは

<button onclick="selected_comp('text')"> 

(私は明確にするため<>を追加する)となります。今

テキストは、それがエラーを発生させますなぜ、あなたがはっきりと見

<button onclick="selected_comp('text with ' embedded')"> 

になりますtext with ' embeddedある場合。

@Terminusで提案されているような回避策はたくさんあります。
PHPスクリプト構造を深く変更することなく、適用するのは簡単ではないかもしれません。だからここ

は少し奇妙表示されることの提案ですが、あなたの現在のコードの組織を使用して保持します:

button onclick=\"selected_comp('" . 
str_replace(["\r", "\n", "'"], ["", "", "\\'"], $comp_row['comments']) . 
"')\" 

まず、あなたは私が(とにかくpreg_replace()が行き過ぎすでにあった)str_replace()preg_replace()から変更されたことに気づくことができます。

ここで、\r\nは「nothing」に置き換えられますが、'もエスケープされます。

+0

良い説明... – devpro

3

あなたの文字列は、あなたのjavascriptのコード内で使用できる有効なJavaScriptの文字列になりたい場合は(あなたの例では - selected_comp関数に文字列を渡す)あなたがする必要があります

  1. は、「あなたはドンを確認してくださいあなたの文字列に改行がありません。
  2. 文字列内に引用符がないことを確認してください(ここでは、コード内で使用する引用符(シングル/ダブル)によって異なります)。

だから、次のことができます。

  1. str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']);
  2. str_replace("'", "\\'", $comp_row['comments']);

そして、あなたのコード内:

<button onclick=\"selected_comp('". 
    str_replace("'", "\\'", 
     str_replace(["\r", "\n"], ['\r', '\n'], $comp_row['comments']) 
    ) . 
"')\" 

あなたの本来の機能でそれを使用するので、私は'を使用。あなたのPHPコードが書かれている方法から

+0

良い説明.. – devpro

+0

ありがとう、それは魅力のように動作します – Wouter