我正在动态创建一个调用 JavaScript 函数的 anchor 。它适用于一个字符串参数,但不适用于两个字符串参数。我相信我没有正确转义参数周围的引号。在寻找答案时,我遇到了以下内容
onclick="alert('<?echo $row['username']?>')"
我发现的下一个让我完全困惑
echo('<button type="button" id="button'.$ctr.'"onClick="showMapsInfo(\''.str_replace("'", "\\'", $maps_name).'\', \''.str_replace("'", "\\'", $ctr).'\');"><img src="img/maps_logo.gif"></button><br/>');
如果有人愿意
解释为什么用户名周围的单引号不必转义?
其中有一个关于转义字符的“傻瓜”,以便我可以尝试破译第二个示例。
最佳答案
让我们检查一下您的第一个示例
onclick="alert('<?echo $row['username']?>')"
这里重要的部分是,<? … ?>
之外的所有内容是纯 HTML,PHP 解释器从未查看过。因此,与 PHP 相关的唯一部分是 <? … ?>
内的代码。 ,即echo $row['username']
。在这里,不需要进行任何转义。
相比之下,你的第二个例子
echo('<button type="button" id="button'.$ctr.'"onClick="showMapsInfo(\''.str_replace("'", "\\'", $maps_name).'\', \''.str_replace("'", "\\'", $ctr).'\');"><img src="img/maps_logo.gif"></button><br/>');
纯粹用 PHP 编写,没有周围的 HTML。因此,您必须小心引用。让我们从头开始构建它,看看这里会发生什么。当你构建这样的东西时,你可能会从
开始echo('<button type="button" id="button1" onClick="showMapsInfo(\'...\');"><img src="img/maps_logo.gif"></button><br/>');
由于单引号已用作字符串分隔符,因此必须在字符串内使用 \'
对它们进行转义。现在介绍 javascript 函数内部的部分。更简单地说,上面的代码归结为
echo('showMapsInfo(\'...\');');
结果
showMapsInfo('...');
当我们想要插入一些动态部分而不是“...”部分时,我们需要以 '
结束字符串并将其与 .
连接起来。假设您想插入一个变量 $foobar
在那里,然后你会写:
echo('showMapsInfo(\''.$foobar.'\');');
结果
showMapsInfo('<VALUE OF $foobar>');
您的示例未插入 $foobar
到这个字符串,而是下面的表达式:
str_replace("'", "\\'", $maps_name).'\', \''.str_replace("'", "\\'", $ctr)
它使用 str_replace
为了再次转义内容,但有一点扭曲:它不是针对 PHP 转义的,而是针对生成的 Javascript 转义的!每一个报价'
变成转义单引号 \'
在输出中,但您需要写 \\'
因为反斜杠需要自行转义,以便生成反斜杠作为输出。
关于php - 我需要使用 PHP 转义 javascript 函数的字符串参数的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372742/