/ / Yii - usuń inteligentne cytaty dla wszystkich aktywnych rekordów - php, activerecord, yii, inteligentne cytaty

Yii - usuń inteligentne cytaty dla wszystkich aktywnych rekordów - php, activerecord, yii, smart-quotes

Mam aplikację, która pozwala użytkownikowiimportuj / wprowadź informacje, które są zapisywane w bazie danych MySQL przy użyciu aktywnego rekordu Yii, a ja mam kilku użytkowników, którzy kopiują / wklejają tekst zawierający inteligentne cytaty Microsoft. Jest to problem, gdy dane są analizowane podczas implementacji witryny na telefonie iPhone, więc potrzebuję sposobu, aby pozbyć się wszystkich inteligentnych cytatów na całym świecie.

Znalazłem funkcję php, która usuwa te znaki z fragmentu tekstu, ale zastanawiałem się, czy istnieje sposób w Yii, aby funkcja była wywoływana za każdym razem, gdy tekst jest zapisywany w bazie danych.

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz przedłużyć CActiveRecord nadrzędny beforeSave metoda w następujący sposób:

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();
}
}

Ten usunie magiczne cytaty dla wszystkich atrybutów zadeklarowanych w aktywnym rekordzie. Alternatywnie możesz zastąpić beforeValidate metoda zamiast beforeSave aby usunąć cytaty tuż przed sprawdzaniem poprawności.


0 dla odpowiedzi nr 2

Polecam tworzenie gettera / settera dla pól, w których może wystąpić, i filtrowanie go tam.

Coś takiego w przypadku pola 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;
}