我有一个允许用户导入/输入信息的应用程序,这些信息使用 Yii 活动记录保存到 MySQL 数据库中,并且我有一些用户复制/粘贴具有 Microsoft 智能引号的文本。当在网站的 iPhone 实现上解析数据时,这是一个问题,所以我需要一种方法来摆脱所有的智能引号。
我找到了一个 php 函数,可以从一段文本中删除这些字符,但我想知道 Yii 中是否有一种方法可以在每次将文本保存到数据库时调用该函数。
我有一个允许用户导入/输入信息的应用程序,这些信息使用 Yii 活动记录保存到 MySQL 数据库中,并且我有一些用户复制/粘贴具有 Microsoft 智能引号的文本。当在网站的 iPhone 实现上解析数据时,这是一个问题,所以我需要一种方法来摆脱所有的智能引号。
我找到了一个 php 函数,可以从一段文本中删除这些字符,但我想知道 Yii 中是否有一种方法可以在每次将文本保存到数据库时调用该函数。
您可以通过以下方式扩展CActiveRecord
覆盖beforeSave方法:
class ActiveRecord extends CActiveRecord
{
protected function removeMagicQuotes($value)
{
return your_function_remove_magic_quotes($value);
}
protected function beforeSave()
{
$attributes = array_keys($this->getAttributes());
foreach ($attributes as $attribute)
$this->$attribute = $this->removeMagicQuotes($this->$attribute);
return parent::beforeSave();
}
}
这将删除活动记录中声明的所有属性的魔术引号。作为替代方案,您可以覆盖beforeValidate方法,而不是beforeSave
在验证之前删除引号。
我建议为可能出现的字段创建 getter/setter 并在那里过滤它。
在现场的情况下是这样的comment
:
// Make field $comment private so get/set will work
private $comment = '';
public function getComment()
{
return clear_function($this->comment);
}
public function setComment($value)
{
// Could clear here too if you want, so it will be stored clean in db
$this->comment = $value;
}