问题描述
|
我有一个管理页面,负责添加产品。我用database0来保护数据库免受不必要的字符的影响。但是,当我从数据库中获取这些数据时(例如,带单引号的产品名称,例如Dave \'s Box),将其显示在页面上的“ 1”属性中时出现错误。
我使用此代码显示产品代码。
echo \"<li onClick=\'fill(\\\"$productName\\\")\'><strong>\".stripslashes($row[\'name\']).\"</strong> by \".stripslashes($row[\'brand\']).\"</li>\";
解决方法
您应该保护代码不受引号,dbl-引号和HTML标记的影响。为此,请使用PHP的
htmlspecialchars()
和ENT_QUOTES
设置。例:
htmlspecialchars($row[\'name\'],ENT_QUOTES);
,在javascript函数调用中,产品名称使用ѭ6name,在普通HTML输出中使用htmlspecialchars
。
,包含其他答案:
使用json_encode
将$productName
值正确编码为JavaScript字符串,然后
使用带有引号样式ENT_QUOTES的“ 7”对它进行正确编码,以在单个引号HTML属性值中使用。
所以:
echo \"<li onClick=\'\" . htmlspecialchars(\'fill(\'.json_encode($productName).\')\',ENT_QUOTES) . \"\'><strong>\" . htmlspecialchars(stripslashes($row[\'name\'])) . \"</strong> by \" . htmlspecialchars(stripslashes($row[\'brand\'])) . \"</li>\";
,根据所允许的有效产品名称的类型,您需要使用addslashes()和可能的htmlentities()。
http://php.net/manual/zh/function.addslashes.php
http://php.net/manual/zh/function.htmlentities.php