2012-07-11 3 views
4

모든 템플릿 변수를 자동으로 이스케이프 처리하고 싶습니다. 즉, 항상 |escape을 쓰지 않아도 이스케이프 처리해야합니다. 따라서 $escape_html 옵션을 사용하도록 설정했습니다.Smarty가 자동으로 모든 템플릿 변수를 이스케이프 처리하지만 캡처는 무시합니다.

그러나 분명히 Smarty는 {capture}을 사용하여 생성 된 변수를 신뢰할 수있는 입력으로 간주 할지라도 똑같은 방법으로 처리합니다. 우리는 코드베이스에 많은 것을 가지고 있고 nofilter을 어디에나 써야만하는 것은 거의 |escape이라고 쓰는 것만 큼 짜증이납니다.

확실히 해결책이 있어야합니까? 또는 $escape_html{capture}이 호환되지 않습니까?

답변

3

$escape_html{capture}은 정의에 따라 호환되지 않습니다.

$escape_html (및 {setfilter}default_modifiers)은 변수의 컨텍스트를 알지 못하는 문제가있다. 변수가 출력 될 때마다 실행됩니다. "어디에서 그 변수가 왔는지"추적이 가능합니다. Smarty 컴파일러는 "변수 $ foo가 캡처를 통해 정의되어 이미 이스케이프 처리되었으므로 다시 이스케이프 처리하지 않습니다."라는 것을 인식 할 수 있습니다. "자바 스크립트의 캡쳐 그룹 탈출구 내에서 html로 결과 문자열 이탈"과 같은 시나리오를 고려할 때조차도 악화됩니다.

는 현재 옵션은 매우 제한됩니다

  1. | 내가 논의 할 것이다 (다시) 이스케이프 안 모든 nofilter

탈출 필요가 모든게 탈출 Smarty의 컴파일러 관리자에게이 문제는 우리가 할 수있는 일을 알아내는 데 도움이됩니다. 그러나 해결책을 찾으면 초기 Smarty 3.2가 도입 될 것입니다. 그래서 지금은 escape/nofilter를 수동으로하십시오.

+1

좋은 소식 : 3.2 todo – rodneyrehm