Php 在查询函数中使用htmlspecialchars

Php 在查询函数中使用htmlspecialchars,php,security,class,pdo,htmlspecialchars,Php,Security,Class,Pdo,Htmlspecialchars,我没有手动将htmlspecialchars函数添加到所有输出的数据中,而是尝试将其放在查询方法中,以便自动处理所有返回的数据 这是我的查询方法: function query($query, $params=NULL) { $stmt = $this->pdo->prepare($query); $execute = $stmt->execute($params); if($execute == false) { return fal

我没有手动将htmlspecialchars函数添加到所有输出的数据中,而是尝试将其放在查询方法中,以便自动处理所有返回的数据

这是我的查询方法:

function query($query, $params=NULL) {
    $stmt = $this->pdo->prepare($query); 
    $execute = $stmt->execute($params);
    if($execute == false) {
        return false;
    }
    //return $stmt->fetchAll();
    $all_data = array();
    foreach($stmt->fetchAll() as $value) {
        $all_data[] = array_map("htmlspecialchars", $value);
    }
    return $all_data;
}
出于某种原因,这似乎只在部分时间起作用。我没有收到任何错误,只是没有返回任何数据

格式化此方法以正确转义输出的所有数据的最佳方式是什么

我没有手动将htmlspecialchars函数添加到所有输出的数据中,而是尝试将其放在查询方法中,以便自动处理所有返回的数据

这是一个糟糕的举动。除了输出转义比输入转义具有“明显”的安全优势外,它还可以让您获得原始数据并编写单元测试,以确保其正确输出

格式化此方法以正确转义输出的所有数据的最佳方式是什么

由于您正在对输入进行转义,并且原始数据丢失,因此无法从给出的描述中判断出发生了什么错误


但一般来说,您希望使用
htmlentities($string,ENT|HTML5 | ENT|u QUOTES,'UTF-8')
(假设您的网站使用UTF-8;选择适当的编码)而不是裸
htmlspecialchars($string)

小心过早地转义HTML数据。以后您可能需要这些数据来做其他事情。在我看来,处理这个问题的最好方法是使用模板引擎,让模板引擎来处理它。看看Smarty,是的,你不应该这么做。这是您的数据库层,它处理数据库。HTML转义特定于表示层,特别是HTML表示层。您可能有许多其他的表示类型,如JSON或电子邮件,它们与HTML无关,但使用相同的数据库代码。这个问题似乎离题了,因为它的前提是有缺陷的,当遵循最佳实践时,这个问题就变得毫无意义了。;-)对传递给json的数据进行转义的最佳方法是什么?您可以对整个数组进行
json\u编码,无需单独转义。