Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在传递到Javascript之前,如何在PHP中转义引号和已转义引号?_Php_Javascript_Quotes_Double Quotes - Fatal编程技术网

在传递到Javascript之前,如何在PHP中转义引号和已转义引号?

在传递到Javascript之前,如何在PHP中转义引号和已转义引号?,php,javascript,quotes,double-quotes,Php,Javascript,Quotes,Double Quotes,关于逃避单引号和双引号,有很多问题,但我没有幸运地找到解决我这个特殊问题的答案 我有一个PHP函数,它动态返回一个带有onClick事件的图像,onClick事件调用一个Javascript函数,该函数将对象名作为参数,如下所示: $response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>""; 我应该如何在PHP中格

关于逃避单引号和双引号,有很多问题,但我没有幸运地找到解决我这个特殊问题的答案

我有一个PHP函数,它动态返回一个带有onClick事件的图像,onClick事件调用一个Javascript函数,该函数将对象名作为参数,如下所示:

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

我应该如何在PHP中格式化$response,以确保当用户输入包含“或”或“或”或“或”的名称时,Javascript确认不会出错?

使用
json\u encode()
处理字符串。这将确保它是一个有效的JavaScript表达式。

使用
json\u encode()
处理字符串。这将确保它是一个有效的JavaScript表达式。

非常安全的替代方案,它还免费为您提供手动光标

<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>

函数confirmDelete(idx){
if(确认(document.getElementById(“msg”+idx.innerHTML)){
location=“delete.php?idx=“+idx;
}   
返回错误
}

非常安全的替代方案,它还免费为您提供手动光标

<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>

函数confirmDelete(idx){
if(确认(document.getElementById(“msg”+idx.innerHTML)){
location=“delete.php?idx=“+idx;
}   
返回错误
}

您可以使用htmlspecialchars或htmlentities对php中的任何引号进行转义,但是这并不能解决单引号的问题,即使设置了ENT_引号

做一点测试,我认为以下应该可以工作,尽管它可能不是很优雅:

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

希望这有助于

您可以使用htmlspecialchars或htmlentities在php中转义任何引号,但是这并不能解决单引号的问题,即使设置了ENT_引号

做一点测试,我认为以下应该可以工作,尽管它可能不是很优雅:

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

如果您的输入字符串中有单引号、双引号、斜杠和反斜杠,希望这对我有帮助

另一种解决方案对我有效:

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

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

多亏了尼卡

如果您的输入字符串中有单引号、双引号、斜杠和反斜杠,另一种解决方案对我有效:

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

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

多亏了尼卡

谢谢你的建议!这看起来像是我将来可能会用到的东西,但在我目前的情况下,恐怕需要太激烈的重写。我希望使用某种函数来简单地转义这4个字符(组合),就像json_encode()ThiefMaster建议的那样。谢谢你的建议!这看起来像是我将来可能会用到的东西,但在我目前的情况下,恐怕需要太激烈的重写。我希望使用某种函数来简单地转义这4个字符(组合),就像json_encode()ThiefMaster建议的那样。我在示例中使用和转义引号的方式是否有任何错误,如果仅应用于$event->getName()会导致这项工作失败?我在示例中使用引号和转义引号的方式是否有任何错误,如果仅将其应用于$event->getName(),可能会导致此错误?我对代码进行了一些扩展<代码>htmlentities(str\u replace(“'”、“\'”、str\u replace(“\'”、“\\\'”、$input))因此对话框实际上显示“如果用户输入\”。我不知道如何对\“执行同样的操作,但至少这样可以防止确认对话出错。感谢您的建议。啊,我没有考虑用户输入转义引号。下面应该考虑所有4种情况,并将其全部合并到1个str_replace()调用中。您可能不需要htmlentities()如果你也在逃避“咒语”,打电话给我,但它可能很容易处理&和其他特殊咒语。请尝试:
str\u replace(数组(“\'”、“\'、“”、“”)、数组(“'、”、“\'”、“\'”)$input)
是否将“\”替换为“\”,然后将“\”替换为“\”,只是将问题切换过来?或者函数不是这样工作的?也许我的问题不是很清楚。我不想在传统意义上对输入进行清理,我实际上希望警报能够显示用户输入的内容,与他们输入的内容完全一致。我特别难以替换\“中的反斜杠和双引号,因此我可以像那样将其传递给javascript。
htmlentities(stru替换(数组(“\”、“\”、“'”、“'”、“'”),数组(“\”、“\”、“\”、“\”、“\”、“\”、“\”、“\”、“\”、“,”),$input))
似乎完成了我想做的事情,尽管我无法解释为什么htmlentities会起作用。有什么原因不能只使用
addslashes()
函数吗?我对代码进行了一些扩展。
htmlentities(str\u replace(“'”,“\”,str\u replace(“\”,“\\”,$input)))
因此对话框实际上显示“如果用户输入了”,我不确定如何对“进行同样的操作”,但至少这样可以防止确认对话框出错。谢谢你的建议。啊,我没想到用户会输入转义引号。下面应该考虑所有4种情况,并将其合并到1个str_replace()调用中。如果您也要转义“chars,但它可能很方便处理&和其他特殊字符,那么您可能不需要htmlentities()调用。请尝试:
str\u replace(数组(“\”、“\”、“”、“”、“\”)”),数组(“'”、“\”、“\”),“\”,“\”,“\”,“\”,”,“\”,“,”,“\”,“,”,“\”,“,”,“,”,“\”,“,”,“,”,“,”,“\”,”,“,”,“,”,““把问题转过来就行了?或者函数不是这样工作的?也许我的问题不是很清楚。我不想在传统意义上对输入进行清理,我实际上希望警报能够显示用户输入的内容,与他们输入的内容完全一致。我特别难以替换\“中的反斜杠和双引号,因此我可以像那样将其传递给javascript