2013-08-02 51 views
0

我在每一個我的PHP頁面頂部下面的代碼:撤消mysql_real_escape_string

<?php 

    function name_format($str) 
    { 
     return trim(mysql_real_escape_string(htmlspecialchars($str, ENT_QUOTES))); 
    } 
?> 

foreach ($_POST as $key => $value) { 
     if (!is_array($value)) 
     { 
      $_POST[$key] = name_format($value); 
     } 
    } 

這是非常有用的,直到現在。我經歷過,如果我想在將它寫入數據庫之前顯示<textarea>中的文本,那麼它會顯示「\ r \ n」而不是正常換行符。 即使我嘗試做以下,這是行不通的:

$str = str_replace("\r\n", "<br>", $str); 
+6

不會首先做它*比做和撤消它更好嗎? :)'mysql_real_escape_string()'應該只用於在查詢之前轉義數據的目的 –

+0

爲什麼要將*賦值給'$ _POST'?這是一件很奇怪的事情。 – tadman

+0

'echo nl2br($ str);'? – Martijn

回答

0

你讓這裏用的版本,你希望將適合字符串的過度寫$_POST的錯誤全部上下文(同時使用mysqli_real_escape_stringhtmlspecialchars)。

您應該保持原始值不變,並且使用該上下文的相應函數將其轉義。 (這是爲什麼早期版本的PHP的「魔術引號」功能被普遍認爲是不好主意的原因之一。)

所以在你的數據庫代碼中,你需要準備一個用於SQL的變量(特別是, MySQL的):

$comment = mysqli_real_escape_string(trim($_POST['comment'])); 

且模板中,你會準備一個變量爲使用HTML:

$comment = htmlspecialchars(trim($_POST['comment'])); 

在HTML中的上下文可能加入呼叫nl2br(),根據需要。