2013-08-02 53 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(),根据需要。