PHP生成带引号错误的Javascript代码
发布时间:2020-12-13 21:54:25 所属栏目:PHP教程 来源:网络整理
导读:我有这个 PHP页面: ?php$lines = array();$lines[] = "I am happy";$lines[] = "I'm happy";foreach ($lines as $line){ $message = htmlspecialchars($line); ? div onclick="alert('?=$message?');"div ?php} 它生成此HTML结果: div onclick="alert('I a
我有这个
PHP页面:
<?php $lines = array(); $lines[] = "I am happy"; $lines[] = "I'm happy"; foreach ($lines as $line){ $message = htmlspecialchars($line); ?> <div onclick="alert('<?=$message?>');"><div> <?php } 它生成此HTML结果: <div onclick="alert('I am happy');"><div> <div onclick="alert('I'm happy');"><div> 此代码似乎是正确的,但是,单击第二个“div”元素时会发生错误. ' char相当于’和javascript生成错误: alert('I'm happy');" 我解决了这个问题,添加代码addslashes()PHP函数: $lines = array(); $lines[] = "I am happy"; $lines[] = "I'm happy"; foreach ($lines as $line){ $message = htmlspecialchars(addslashes($line)); ?> <div onclick="alert('<?=$message?>');"><div> <?php } 正确的结果: <div onclick="alert('I am happy');"><div> <div onclick="alert('I&;#039;m happy');"><div> 我的问题: 这是正确/最佳的解决方案吗? 解决方法
不要尝试通过将字符串混合在一起来生成JavaScript字符串文字. json_encode将为您提供JS所需的所有转义(‘,“,新行等).它优先使用addslashes,因为它是针对目标数据格式设计的,并非通用的(通用转义解决方案)往往会错过的东西).
在将数据放入值之前,将HTML属性值的数据编码为对数据执行的最后操作.在将数据放入JavaScript之前不要对HTML进行编码. foreach ($lines as $line){ $message = json_encode($line); $javascript = "alert($message)"; $html = htmlspecialchars($javascript); ?> <div onclick="<?= $html ?>"><div> <?php } 也就是说,现代方法通常会将JavaScript分开并将数据存储在数据属性中. 你还应该避免在div元素上放置click事件,它们不是设计成用户控件,所以它们不能(没有更多的混乱)被(例如)聚焦元素并按Enter键来触发,这会产生可访问性问题. foreach ($lines as $line){ $html = htmlspecialchars($line); ?> <button type="button" data-message="<?= $html ?>">...</button> <?php } 同 <script> function buttonAlert(event) { var message = event.target.dataset.message; if (message) { alert(message); } } addEventListener("click",buttonAlert); </script> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |