以下列方式使用nl2br的正确方法是什么。
我发布了来自文本区域输入的数据
$data = $_POST;
$escaped_data = array();
foreach ($data as $key => $val) {
$escaped_data[$key] = mysql_real_escape_string($val);
}
$desc = $escaped_data[description];
$desc = nl2br($desc);
答案 0 :(得分:5)
实际上,使用nl2br()的正确方法是在存储数据时根本不使用它 - 当您从数据库中读取并将要将其输出到客户端时。在插入数据库时不应格式化数据,如果您以后想要创建REST服务并且您确实需要这些换行而不是HTML元素,该怎么办?
答案 1 :(得分:0)
一般来说,如果您希望在SQL查询中添加字符串,则应在将其添加到SQL查询之前立即将其转义。
我假设您想要在PHP脚本的开头转义所有数据,这样您就不必担心转义了。
不应该在那里包含用于SQL查询的转义字符串,因为这是一种糟糕的设计方法:
我认为应该使用以下代码:
function init_filter_input($method_array /* $_GET, $_POST, or whatever you wish */ )
{
filter_UTF8($method_array); // for a UTF8 encoded string
filter_HTML($method_array);
}
function filter_UTF8($mixed)
{
return is_array($mixed)
? array_map('filter_UTF8',$mixed)
: iconv('UTF-8','UTF-8//IGNORE',$mixed);
}
function filter_HTML($mixed)
{
return is_array($mixed)
? array_map('filter_HTML',$mixed)
: htmlspecialchars(trim($value),ENT_QUOTES);
}
如果要在SQL查询中添加字符串,可以决定使用预准备语句或sprintf:
// sprintf example:
query('SELECT ... WHERE username="%s"', $unescaped_username);
function query($query_str, $params)
{
if (is_array($params))
{
$params = array_map('filter_SQL', $params);
$query_str = vsprintf($queryStr, $params);
}
else
$query_str = sprintf($query_str ,filter_SQL($params));
mysql_query($query_str);
}