我正在使用类似于以下脚本的内容来生成无序的用户列表:
<?php
$user_info = array(
'name' => 'Curtis',
'advisory' => 7,
'color' => 'red'
);
$users = array($user_info);
// Assume $users could have multiple user arrays in it
foreach ($users as $user) {
$name = $user['name'];
$data = http_build_query($user);
echo "<li data='$data'>$name</li>";
}
?>
此处,所有用户信息都被编码为HTML属性data
。这样做的想法是在前端,有一个jQuery函数,当单击用户时,可以编辑该用户的信息,一直到其姓名,颜色等。然后将该信息发送回给使用jQuery的$.ajax()
的服务器。
我想将信息保存在<ul>
中而不是<table>
中,因为我不需要显示颜色或建议,因此可以使用HTML属性来存储数据。我的问题是:考虑到对通过$.ajax()
接收到的数据进行后端验证,这是一种安全的数据传输方式吗?我知道特殊字符可能会出现问题,但是只会使用整数和简单字符串。如果没有,是否有更好的方法来实现此功能?
答案 0 :(得分:0)
不,不是,也不是该功能的用途。 http_build_query仅对URL的字符串进行编码,根本无法提供保护。
如果您想不使用ajax将变量传递给javascript,则将其作为JSON传递。
$users = array($user_info);
echo '<script>';
echo 'var users=JSON.parse(' . json_encode($users) . ');';
echo '</script>';
这不是一个完美的解决方案,因为您将JS和php混合使用,但是获得了javascript对象,因此可以轻松地在javacsript中与users [0] .name一起使用它等等。或者如果用户在数组中,则遍历用户
第二种选择是使用'data-',并在<li>
等echo '<li data-user-name="' . $user['name'] . '">'
标签中使用它。
第三个常用的方法是使用ajax请求来获取作为php脚本响应返回的json对象。
如果您想确保安全,则应该清理,验证和转义用户数据。