1

我将 FCKEditor 与 CakePHP 一起使用,当我保存从编辑器发送的数据时,我想在数据上运行 htmlspecialchars() 和 mysql_real_escape_string() 函数以在将其存储到数据库中之前对其进行清理。问题是我不太确定在 CakePHP 框架中的何处执行此操作。我在控制器中尝试过这样的:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

但是 $this->data 是一个数组,这些函数需要字符串,所以这不起作用。我是否在模型的验证数组中执行此操作?我不知道。另外,如果在 mysql_real_escape_string() 中运行 htmlspecialchars() 不是一个好习惯,请告诉我。

4

3 回答 3

3

保存数据htmlspecialchars()时不要使用,将数据输出到 HTML 时使用。如果您需要在 HTML 以外的其他上下文中查看数据怎么办?

此外,我不是 Cake 用户,但如果您mysql_real_escape_string()在保存数据时也需要申请,我会感到惊讶。数据库访问层应该保护您免受 SQL 注入,并且通过手动执行此操作,您最终将存储双重转义的字符串。

于 2009-06-05T16:26:11.827 回答
1

简短而简单的答案是 - 如果数据库访问已经被抽象出来,那么您根本不需要调用这些函数。

唯一需要它们的地方是,如果您从字符串位构建实际 SQL。无论如何你都不应该这样做,但那是另一回事了。

底线是 - 框架会做正确的事情,不要干涉。

编辑:正如比尔卡尔文指出的那样 -htmlspecialchars()来自这里完全错误的部门。

于 2009-06-05T16:26:36.307 回答
1

如果您正在使用 CakePHP 构建自己的 SQL 字符串,那么 CakePHP 提供了转义函数:

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape

于 2011-09-24T21:18:49.660 回答