2010-03-25 31 views
0

誰能告訴我,爲什麼叫「反序列化」工作正常動作,但在模板中給出了一個偏移誤差?的Symfony /原則:反序列化在行動VS模板

它基本上可以反序列數據庫的文本結果到一個變量中的作用,並把它傳遞給模板,在這種情況下,顯示細膩:

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

但如果在模板中直接調用:

<?php echo unserialize($raw) ?> 

是否有興趣知道爲什麼會這樣,以及是否有一些解決方法。

謝謝。

回答

3

Symfony的將所有的模板變量爲sfOutputEscaperArrayDecorator類。所以,當你寫unserialize($var),你實際上是試圖反序列化sfOutputEscaperArrayDecorator類。

我建議關閉輸出轉義settings.yml中:

escaping_strategy:  false 

這是一個愚蠢的,性能屠宰,需要殺害Symfony的不必要的功能。

更新

如果關閉escaping_strategy,則需要從用戶(以防止XSS)與htmlSpecialCharacters()手動輸入逃跑。

symfony的類不適合您,但是這意味着它也逃脫的每一個數字和字符 - 其中99%的你已經知道會是安全的(標識,日期,自己的內容)。當我關閉自動轉義時,我的服務器負載顯着下降。

請記住,Symfony的如果你傳遞一個sfOutputEscaperArrayDecorator到部分雙應用於這種自動逃逸,這意味着>將成爲&amp;gt;

+0

@Coronatus ......啊,這是有道理的。如果我關閉逃避策略,還有什麼可以期待改變? (除非這是我應該上正常閱讀了) – Tom

+1

另外,我會在聽到它是如何的性能屠宰真的有興趣? – Tom

+0

非常感謝。 – Tom