让我们检查您的第一个示例
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 转义的!每个单'
引号在输出中都会变成一个转义的单引号\'
,但是您需要编写\\'
,因为反斜杠需要自行转义,以便生成反斜杠作为输出。