php - 我需要使用 PHP 转义 javascript 函数的字符串参数的帮助

标签 php javascript

我正在动态创建一个调用 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/>');

如果有人愿意

  1. 解释为什么用户名周围的单引号不必转义?

  2. 其中有一个关于转义字符的“傻瓜”,以便我可以尝试破译第二个示例。

最佳答案

让我们检查一下您的第一个示例

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/

相关文章:

php - 根据给定的 ID 使用相同的值更新表

php - Sql select count 使用五个条件

php - 如何在命令中将参数传递给 linux

php - 尝试使用 php 将视频仅传输给经过身份验证的用户

javascript - 如何从不同地方调用两个onClick事件

php - 如何从php中的根目录外部访问文件

JavaScript 范围 : why foo returns undefined?

javascript - 我可以将逻辑运算符放在 document.querySelectorAll 中吗?如果是这样,如何?

javascript - AngularJS,使用 Rest 服务,该服务以 Array<Object> 进行响应。如何在表格中显示这一点?

javascript - 如何使用从同一文件获取的文字访问 JSON 文件中的对象属性