【发布时间】:2013-08-02 16:55:36
【问题描述】:
我在每个 php 页面的顶部都有以下代码:
<?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);
【问题讨论】:
-
一开始就不做会比做和撤消更好吗? :)
mysql_real_escape_string()实际上应该仅用于在进行查询之前转义数据 -
你为什么分配给
$_POST?这真是一件很奇怪的事情。 -
使用
mysql_real_escape_string(或者更好的PDO)来清理输入的字符串。单独htmlspecialchars应该足以清理字符串用于输出。 -
一个选项是使用 PDO 或 mysqli,那么您根本不必转义字符串。 Mysql_* 函数也被弃用了。
-
@bestprogrammerintheworld 这有点误导。您的意思是“始终使用参数化查询”。在这两个库中使用任意动态字符串仍然是可能的(有时是可取的)。参数化查询也不意味着您不应该考虑其他类型的转义,例如 HTML 或 URL 参数。正如我试图在我的回答中解释的那样,考虑什么转义适合特定的上下文总是很重要的。
标签: mysql line-breaks