2011-10-18 50 views
0

我的理解是所有變量都應該通過htmlspecialchars()在視圖中輸出。htmlspecialchars - 必須有更好的方法

是否有任何方法或方法來做到這一點,而不必在每個視圖中的每個適當的行上指定函數?

,我能想出的最好是有一個輔助功能如下: 器函數html_escape($ VAR)

function h($var) 
{ 
    if (is_array($var)) 
    { 
    return array_map('h', $var); 
    } 
    else 
    { 
    return htmlspecialchars($var, ENT_QUOTES, 'UTF8'); 
    } 
} 

但還是......這有可能會非常繁瑣!

任何想法?

+0

誰說htmlspecialchars應該用於每個變量輸出? – imm

+4

這是PHP模板引擎存在的原因之一。查看[本教程](http://coding.smashingmagazine.com/2011/10/17/getting-started-with-php-templating/)瞭解一些信息。 –

+0

@imm嗯,我的意思是說每個用戶提供的變量 – JonoB

回答

2

您可能會有功能h()輸出轉義數據,而不是返回它。因此,而不是寫<?php echo h($myvar); ?>,你可以寫<?php h($myvar); ?>。現在,這個字符比在不轉換爲實體的情況下回顯變量短兩個字符。

1

這是一個重要的區別要注意,並非所有變量必須通過ヶ輛/用htmlspecialchars運行,只是包含用戶提供的內容反正那些,那些尚未進行篩選的規則設定,以防止任意代碼包含。

你可以創建一個輔助函數來減少輸入,或者在控制器中通過htmlentities/htmlspecialchars循環所有用戶提供的輸入,然後將它們交給視圖(儘管這樣做可能效率較低,不太可能每個用戶提供的輸入都會顯示)

0

你在那裏有什麼可能是最接近你在分配的情況下輕鬆逃脫。

我個人使用一個小圈對我的變量,如果我知道我將要使用在我的HTML輸出任何$_GET變量,我運行此:

<?php 
foreach($_GET as $key => $value) { 
    $_GET[$key] = htmlspecialchars($value); 
} 
?> 

然後開始我的HTML標記權後。

雖然不是所有的東西都需要轉義,除非用戶對它有任何影響。

此外,你可以有一個名爲escape.php腳本,它使用您使用公共變量上面的方法,比如$ _GET,$ _ POST,$ _ COOKIE等,然後include('escape.php')它在腳本中使用之前在html輸出。

這一切都取決於你的口味和你的項目需要。

相關問題