2012-10-15 93 views
0

消毒一些用戶輸入;PHP;編碼和解碼功能產生相同的輸出

function html_mysql_sanitise($data) { 
    if(get_magic_quotes_gpc()) { 
    $data = stripslashes($data); 
    } 
    $data = htmlentities($data, ENT_QUOTES); 
    $data = htmlspecialchars($data, ENT_QUOTES); 
    return mysql_real_escape_string($data); 
} 

$_POST['data'] = html_mysql_sanitise($_POST['data']); 

echo $_POST['data']; 
echo html_entity_decode(htmlspecialchars_decode($_POST['data'])); 
echo html_entity_decode($_POST['data'], ENT_NOQUOTES); 
echo htmlspecialchars_decode($_POST['data'], ENT_NOQUOTES); 

$ _POST ['data'] is set to;

test<d#'!;ta> 

這是的輸出是;

test&lt;d#&#039;!;ta&gt; 
test 
test<d#'!;ta> 
test<d#'!;ta> 

爲什麼最後兩個產生相同的結果,第二個是發佈數據的一部分?由於最後兩個似乎產生了期望的結果,我應該使用哪一個?

謝謝。

+0

是'''提交爲'"'?如果它只是一個真正的''',那麼解碼不會改變它。 –

+2

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。另請參閱[爲什麼不應該在PHP中使用'mysql'函數?](http://goo.gl/ycnmO) –

+0

@MadaraUchiha感謝您的信息Madara,一些非常有用的鏈接,我將盡快更新此代碼!感謝:D – jwbensley

回答

1

爲什麼要重新發明輪子...使用:

http://htmlpurifier.org/docs

或者這樣:

http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php

既精通你想要做什麼。

+0

這些都非常棒,非常感謝鏈接!正是我需要的和更強大的 – jwbensley

+0

,我將它與來自@MadaraUchiha關於mysql_函數的評論結合起來。 PDO也是最好的方式 - 正如他的論點一樣,你的應用程序可能正處於改變這種情況的階段 – Brian