1

一重引用符と二重引用符をエスケープすることについては多くの質問がありますが、特定の問題を解決する答えを見つけることができませんでした。

次のように、引数としてオブジェクトの名前を使用してJavascript関数を呼び出すonClickイベントを使用して画像を動的に返すPHP関数があります。

$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>"";

Javascript関数は、次のような時点で確認ダイアログを表示する必要があります。

confirm('Delete event ' + name + ' ?')

ユーザーが'または"または\'または\"を含む名前を入力したときにJavascriptの確認が混乱しないようにするには、PHPで$ responseをフォーマットするにはどうすればよいですか?

4

4 に答える 4

8

htmlspecialchars または htmlentities を使用して php の引用符をエスケープできますが、ENT_QUOTES が設定されていても、単一引用符の問題は解決されません。

少しテストを行うと、次のように動作するはずですが、あまりエレガントではない可能性があります。

$name = htmlentities(str_replace("'", "\'", $event->getName()));
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete('" . $name . "')\"/>";

それが役立つことを願っています

于 2011-04-13T10:07:27.530 に答える
2

を使用して文字列を処理しますjson_encode()。これにより、有効なJavaScript式であることが保証されます。

于 2011-04-13T09:46:18.967 に答える
2

ハンドカーソルも無料で提供する非常に安全な代替手段

<script> 
function confirmDelete(idx) {
  if (confirm(document.getElementById("msg"+idx).innerHTML)) {
    location="delete.php?idx="+idx;   
  }   
  return false 
}
<span id="msg1" style="display:none"><?PHP echo $event->getName(); ?></span> 
<a href="#" onClick="return confirmDelete(1)"><img src="images/action_delete.gif" style="border:0" /></a>
于 2011-04-13T09:51:52.670 に答える
0

入力文字列に一重引用符、二重引用符、スラッシュ、バックスラッシュがある場合、別の解決策がうまくいきました。

$output = htmlentities(str_replace(array(chr(92), "'"), array(chr(92) . chr(92), "\'"), $input));

次のようなもので:

 onClick=\"confirmDelete('" . $output . "')\"

ニチャに感謝!

于 2014-03-15T15:15:23.423 に答える