2010-03-25 8 views
0

"unserialize"를 호출하면 동작이 제대로 작동하지만 템플릿에서 오프셋 오류가 발생하는 이유는 누구든지 말해 줄 수 있습니까? 템플릿에서 직접 호출하는 경우Symfony/Doctrine : 액션 대 템플릿에서의 비 직렬화

$this->clean = unserialize($this->raw); 
<?php echo $clean ?> 

하지만하지 :

그것은 잘 표시하는 경우, 작업의 변수로 데이터베이스 텍스트 결과를 unserialize 및 템플릿에 전달하기 위해 기본적으로 가능

<?php echo unserialize($raw) ?> 

이유가 무엇인지, 몇 가지 해결 방법이 있는지 알고 싶습니다.

감사합니다.

답변

3

Symfony는 모든 템플릿 변수를 sfOutputEscaperArrayDecorator 클래스에 넣습니다. 따라서 unserialize($var)을 쓸 때 실제로 sfOutputEscaperArrayDecorator 클래스를 직렬화 해제하려고합니다.

escaping_strategy:  false 

그것은 바보, 성능 도살, 살해 필요가 심포니의 불필요한 기능입니다 :

나는 settings.yml에 출력 이스케이프를 해제하는 것이 좋습니다. 업데이트

:

당신이 escaping_strategy을 해제하면 수동 htmlSpecialCharacters()와 사용자 (XSS를 방지하기 위해)에서 입력을 탈출해야합니다.

심포니 클래스는 당신을 위해 그런 일을하지만, 그것은 또한 모든 단일 숫자와 문자를 이스케이프한다는 것을 의미합니다. 당신이 이미 알고있는 것 중 99 %가 안전 할 것입니다 (ID, 날짜, 자신의 콘텐츠). 자동 탈출 기능을 끄면 서버로드가 크게 줄어 들었습니다. 이 부분에 sfOutputEscaperArrayDecorator를 전달하면 심포니 탈출을이 자동을 두 번 적용

의미가 그 아 ... &amp;gt;

+0

@Coronatus 될 것 >을 의미 명심하십시오. 탈출 전략을 끄면 무엇을 바꿀 수 있습니까? (이것이 내가 올바르게 읽어야하는 것이 아닌 한) – Tom

+1

또한, 나는 그것이 성능을 과소 평가하는 방법을 듣는 것에 정말로 흥미가있을 것입니까? – Tom

+0

대단히 감사합니다. – Tom