2012-04-16 3 views
0

악센트 CakePHP2.0과 : 그런살균 :: HTML 나는 데이터베이스에 내 데이터를 저장하기 위해 사용하던

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

, 나는 악센트를 가진 사람처럼 내 DB에 약간의 "특별한"문자를 절약 할 수 : áéíúú 아무런 문제없이.

그럼, HTML 및 SQL 주입에서 내 응용 프로그램을 보호하기 위해 노력하고 내가 같은 살균을 사용 :

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

그래서 지금 내 텍스트는 다음과 같이 데이터베이스에 저장됩니다

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

그리고 나는 그것을 원하지 않는다. 또한, DB에 내 필드는 문자의 maximun있다 그리고 이것은 도움이되지 않습니다.

나는 또한 encode = true, encode = false 또는 encode = 'utf8'로 sanitize에서 옵션 param을 사용하려고 시도했지만 아무 것도 바뀌지 않는 것 같습니다.

어떻게해야합니까? 감사합니다. .

UPDATE 1

나는 또한 내 컨트롤러의 기능을 htmlentities에서 사용하는 것을 시도했다

하지만이 대신 내 데이터베이스에서이 삽입 : 당신이 (당신의 데이터를 저장하기 위해 케이크를 사용하는 경우

à 

답변

2

즉, save()이 아닌 query()을 사용하면 SQL 인젝션으로부터 보호됩니다. 값을 자동으로 이스케이프합니다.

Sanitize::html()>, á 등과 같이 문자를 HTML 엔터티로 변환합니다. HTML 엔터티를 특별히 필요로하지 않는 이상 사용하지 않는 것이 좋습니다. Cake는 앱과 테이블에 적절한 인코딩을 가지고 있다면 악센트를 데이터베이스에 저장하는 일을 잘 처리 할 것이다.

+0

좋아, 그렇다면 html ($ myText)을 HTML보기에서 바로 보호하기 위해 내보기에서 사용해야합니다. – Alvaro

+0

좋아, 나는 내 몸에 포함 된 URL이 HTML 형식 (aaa)으로 작성되어 그것을 파괴하므로 내보기에서 치료할 수 있습니다. 컨트롤러에서 htmlentities를 사용하려고했지만 데이터베이스에이 사실을 저장합니다. & Atilde; 대신에 – Alvaro

+0

HTML을 저장하지 않으려면'Sanitize :: stripTags()'만 할 수 있습니다. 'h()'는 당신을 도와주지 않습니다. 문자를 엔티티로 변환합니다.'Sanitize :: html()'과 같은 일을합니다. – jeremyharris

관련 문제