我想为来自各种来源的数据建立一个通用的消毒剂。我的意思是(在这个阶段)将 htmlspecialchars 应用于字符串。现在,来自这些源的数据可以是任何东西,从对象到数组再到字符串,都是嵌套的(而且很复杂),而且格式总是有点不同。
所以我想到了一个递归的 htmlspecialchars 函数,它适用于数组和对象,并且只将 htmlspecialchars 应用于字符串,但是我如何递归地遍历一个对象呢?
谢谢。
编辑:我想我应该提到这一点 - 我实际上正在构建一个严重依赖 JS 和 JSON 进行客户端-服务器通信的 RIA。服务器唯一要做的就是从数据库中获取数据并通过 JSON 将其返回给客户端,格式如下:
{"stat":"ok","data":{...}}
现在正如我所说,数据可以是任何东西,不仅来自字符串形式的数据库,还来自 XML 处理 JSON 的工作流程如下:
- 从 DB/XML 获取数据(源编码为 iso-8859-1)
将它们放入“数据”数组
使用递归从 iso-8859-1 转换为 utf-8
private function utf8_encode_deep(&$input) { if (is_string($input)) { $input = $this -> str_encode_utf8($input); } else if (is_array($input)) { foreach ($input as &$value) { $this -> utf8_encode_deep($value); } unset($value); } else if (is_object($input)) { $vars = array_keys(get_object_vars($input)); foreach ($vars as $var) { $this -> utf8_encode_deep($input -> $var); } } }
使用 PHP
json_encode
将数据转换为 JSON将数据发送(回显)到客户端
使用 JS 渲染数据(例如放入表格)
在这之间的某个地方,应该以某种方式对数据进行清理(在这个阶段只有 htmlspecialchars)。现在的问题应该是:在哪里消毒,使用什么方法?