使用实体在PHP回声中转义JS

时间:2014-03-21 02:29:53

标签: javascript php escaping

(这里有很多关于在PHP中逃避JS的问题,但我仍然无法确定在所有情况下作为规则使用的最佳方法。)

考虑页面上的脚本:

echo '<a class="x2delete"  onclick="if ( confirm("Are you sure you want to delete " +  ' . $img  . ') ) { DeleteImage('."'".$img."'"." ,' ".$count."'".'); return false; }" href="javascript:;"></a>';

这当然没有用,所以我试图逃避它:

confirm(\"Are you sure you want to delete ?\")

我还尝试了' /\\/以及其他各种方法,但所有转义方法都失败了,直到我决定使用正确的XML实体表示形式&quot; < / p>

if ( confirm(&quot;Are you sure you want to delete ?&quot; +  ' . $img  . ')

因此&quot;适用于此特定代码。 (它甚至可以被认为是逃避吗?)

我的问题是:

  1. 使用它是否正确?
  2. &quot;期间,使用echoing js in php ?进行转义将始终适用于我 我可以一直使用它而不是其他逃避方法(对我来说,只是试错了..)

  3. 它是否始终适用于所有浏览器?

  4. (奖励非强制性/相关问题)。为什么我需要confirm()周围的括号?只写

    if confirm(&quot;Are you sure you want to delete ?&quot;)

  5. 给了我一个错误的括号错误。我确信它可以在一个条件/行中工作。

2 个答案:

答案 0 :(得分:0)

您需要插入文字反斜杠,这意味着使用\\

echo '<a class="x2delete"  onclick="if ( confirm(\\"Are you sure you want to delete...

答案 1 :(得分:0)

这是我们想要的最终结果,对吧?

单引号或双引号:

单曲:

 confirm("are you sure you want to delete?");

双重说明:

 confirm('are you sure you want to delete?');

所以现在的问题是,如何将其包装成php代码。嗯,没有最好的&#34;实践。唯一的好做法是以对您来说可读的方式,对同一团队工作的其他程序以及 joiner程序员< / strong>谁可能会加入团队。在这里,我将分享我在我工作的几个项目中看到的一些实践。

一旦项目中出现模式,建议遵循该模式。因此,如果您的项目遵循反斜杠转义,那么这样做会更好。

练习1:关闭php标签,编写html,再次打开php。打开内联变种的PHP。

?>
<a onclick="confirm('Do you like this patter?')" href="<?php echo $ref_link ?>">Click Me!</a>
<?

练习2:在内部使用双引号,在内部使用单引号,为内部字符串使用转义双引号:

echo "<a class='x2delete'  onclick='if ( confirm(\"Are you sure you want to delete +  " . $img  . "\") ) { DeleteImage(\"".$img."\" ,\"".$count."\"); return false; }' href='javascript:;'>Click Me</a>";

请记住,即使您编写

,浏览器(本例中为Firefox)也会使用双引号
onclick='confirm("Is this ok?")' 

它将被解析为:

onclick="confirm("Is this ok?")" 

关于你的问题1-3,即使每个人都告诉你“是”&#39;它会工作。直到你的尝试,你才能真正了解自己。浏览器更改,语言更改,编译器更改,因此最好的方法是亲自测试。

关于你的上一个问题:

if confirm('Are you sure you want to delete ?')

你不能这样做,if是一种语言结构,条件必须括在一对括号()中。你可以跳过的是条件体{}有一个语句体。我相信这在编程语言中很常见,至少是我试过的

if(true)alert("yes"); else alert("no");

它的语法有效。但它被认为是不好的风格。