2012-04-16 7 views
0

Я использовал это, чтобы сохранить данные в базу данных:Sanitize :: HTML с акцентами CakePHP2.0

$this->request->data['Post']['body'] = utf8_decode($this->request->data['Post']['body']); 

Как это, я мог бы сохранить в моей БД некоторые «специальные» символы, такие как те, с акцентом : áéíóú без проблем.

Затем я попытался защитить мое заявление от HTML и SQL инъекций, и я использовал санитарную так:

$this->request->data['Post']['body'] = Sanitize::html($this->request->data['Post']['body']); 

Так что теперь мой текст хранится в базе данных, как это:

á = á 
é = é 
í = í ...etc 

И я не хочу этого. Кроме того, мое поле в БД имеет максимальное количество символов, и это не помогает.

Я также попытался использовать параметр param для sanitize с encode = true, encode = false или encode = 'utf8', но ничего не меняется.

Что мне делать? Спасибо.

UPDATE 1

Я также пытался использовать htmlentities функцию на мой контроллер, но он вставляет это в моей базе данных вместо того, чтобы:

à 

ответ

2

Если вы используете торт, чтобы сохранить ваши данные (т.е. с использованием save() не query()), тогда вы защищены от SQL-инъекции. Он автоматически вытесняет значения.

Как указано в документах, Sanitize::html() преобразует символы в объекты HTML, такие как >, á и т. Д. Вероятно, вам не следует использовать его, если вы специально не хотите, чтобы объекты HTML. Cake позаботится о том, чтобы сохранить ваши акценты в базе данных просто отлично, если у вас есть правильная кодировка в вашем приложении и таблицах.

+0

Хорошо, тогда я должен просто использовать h ($ myText) в своих представлениях, чтобы защитить его от инъекций HTML правильно? – Alvaro

+0

Хорошо, я могу обработать его по моему мнению, поскольку мое тело содержит созданный URL-адрес в формате HTML (aaa), и он уничтожает его. Я также пытался использовать htmlentities на моем контроллере, но это сохраняет меня в базе данных: & Atilde; вместо á – Alvaro

+0

Вы можете просто «Sanitize :: stripTags()», если вы не хотите хранить HTML. 'h()' вам не поможет. Он просто преобразует символы в объекты, вроде «Sanitize :: html()». – jeremyharris

 Смежные вопросы

  • Нет связанных вопросов^_^