gpt4 book ai didi

php - 将 friend 姓名的 php 字符串传递给 javascript 函数

转载 作者:行者123 更新时间:2023-11-30 08:12:10 25 4
gpt4 key购买 nike

我正在尝试将 php 字符串传递给 javascript 函数。 php 部分如下所示:

<?php
foreach ($friends as $key => $friend) {
// Extract the pieces of info we need from the requests above
$id = assertNumeric(idx($friend, 'id'));
$name = idx($friend, 'name');
// Here we link each friend we display to their profile
echo('
<li>
<a href="#" onclick="window.open(\'http://www.facebook.com/' . $id . '\')">
<img src="https://graph.facebook.com/' . $id . '/picture?type=square" alt="' . $name . '">'. $name . '
</a>
<form>
<input type="button" value="Meet" onclick="postMeet(. $name.)"/>
</form>
</li>');
}
?>

javascript 函数如下所示。如果我将 $key 或 $id 传递给函数但不传递 $name,它会完美地工作。有人有什么想法吗?我对 php 和 javascript 还很陌生。

<script type="text/javascript">
function postMeet(key)
{
var met = 'Met ';
var body = met + ' '+ key;
FB.api('/me/feed', 'post', { message: body }, function(response) {
if (!response || response.error) {
alert(response[0]);
alert('Error occured');
} else {
alert('Post ID: ' + response.id);
}
});
}
</script>

最佳答案

在您的 echo 中需要考虑三件事声明:

  1. $name是一个字符串,您将在 onclick 中将其作为 字符串文字 嵌入到 JavaScript 中你的 HTML 属性,所以你将它传递到你的 postMeet 中功能,你必须在它周围加上引号。 JavaScript 允许用 ' 引用字符串文字或 " ,只要它们是平衡的。由于我们引用了 onclick属性为 " (因为 HTML 不允许 ' ),最容易使用 '分隔 JavaScript 字符串。所以:把'围绕着它。

  2. postMeet调用在 HTML 属性 ( onclick ) 内,这意味着当标记被读取时,它被读取为 HTML 文本。因此,您必须确保 HTML 特有的任何字符(例如,主要是 <&,在本例中加上 ",因为您使用了 " 作为 onclick 属性的分隔符)被正确编码为 &lt; , &amp; , 和 &quot; . PHP 提供了 htmlspecialchars功能来做到这一点。也许你在想“但是 $name 中永远不会有 <”。错误就是这样出现的。养成对这些东西进行完全编码的习惯,当你输出更有趣的东西时你就不会忘记。此外,人们在数据库中的“名称”字段中填写各种废话。

  3. 在 JavaScript 字符串文字中,反斜杠和您用来分隔字符串的任何类型的引号(例如 '")必须被转义(使用反斜杠).所以你必须考虑 $name 中可能有什么或者更好的是,全力保护自己。字符串文字 'T.J. Crowder'有效,但字符串文字 'Gerard 't Hooft'导致语法错误,因为 ''t Hooft没有逃脱。它必须写成 "Gerard 't Hooft" (用双引号分隔)或 'Gerard \'t Hooft' (转义单引号)。 PHP 提供了一个方便的函数, addslashes , 这将在 ' 之前插入反斜杠, " , \ , 和空字节。

因此,将所有这些放在一起,当我们将变量值输出到 postMeet 时,我们必须在变量值周围加上某种引号。 ,我们必须对特殊的 HTML 字符进行编码,并且我们必须确保引号等使用反斜杠进行转义:

//                +--- start string literal with single quote
// |
// vv
onclick="postMeet(\''. addslashes(htmlspecialchars($name)) .'\')"
// ^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^
// | | |
// escape ", ', and \ -----+ | |
// encode special HTML chars --+ |
// end literal with single quote ---------+

例如:

echo('
<li>
<a href="#" onclick="window.open(\'http://www.facebook.com/' . $id . '\')">
<img src="https://graph.facebook.com/' . $id . '/picture?type=square" alt="' . $name . '">'. $name . '
</a>
<form>
<input type="button" value="Meet" onclick="postMeet(\''. addslashes(htmlspecialchars($name)) .'\')"/>
</form>
</li>');

重要的是要记住正在进行的三层解释:PHP 正在解释您的 PHP 代码并将标记输出到 HTML 页面;浏览器正在解释 HTML 标记,包括 onclick 的内容属性; JavaScript 解释器解释 onclick 的字符串内容属性(浏览器在点击发生时传递它),它必须是有效的 JavaScript 代码。

这是一个更孤立的示例,它很容易复制并粘贴到测试页中。在测试页面使用“查看源代码”,看看浏览器看到了什么,当然点击div查看一切正常:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Escape Test</title>
</head>
<body>
<?php
$stuff = "Gerard 't Hooft says <<\"theoretical physics is FUN & a great way to aid humankind!\">>";
echo('<div onclick="foo(\'' . addslashes(htmlspecialchars($stuff)) . '\')">Click me</div>');
?>
<script>
function foo(stuff) {
alert(stuff);
}
</script>
</body>
</html>

关于php - 将 friend 姓名的 php 字符串传递给 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com