0

我正在通过表格在我的网站上输入新闻。在添加新闻或编辑新闻时,\r 或 \n 被替换为 br。

现在我还有一个问题,例如当我写“I've”时,它会像 I\'ve 一样打印出来。

第一个问题,这是由于 mysql_real_escape_string(); 引起的吗?? 第二个问题,如何用不同的标签替换多个匹配项?

现在我有这样的事情:

$order = array("'", "\'");
$replace = "´";
$order = array("\r\n", "\n", "\r");
$replace = "<br />";
$string = $news;
$insert = str_replace($order, $replace, $string);

我几乎可以肯定这不是正确的方法,因为它们都被分配给相同的变量,..有人可以指出我正确的方向吗?

编辑:虽然这可行,但我是否“允许”这样编码?

编辑:谢谢大家的回答,问题已经解决了!:)

4

5 回答 5

2

是的,这不是正确的做法。

您应该首先确保在 html 和数据库中使用一致的字符集。接下来,记住神奇的规则:永远不要清理输入,总是清理输出。

即您放入数据库的数据的唯一更改应该是 mysql_real_escape_string() (或使用绑定参数)。要输出到浏览器,请使用 htmlentities() - 不要尝试编写您自己的版本。除非没有适当的方法可以正确地转义内容,否则不要使用 stripslahses。

另外,确保在 PHP 中的任何地方都禁用了 addlashes 。

于 2013-05-02T12:52:06.957 回答
0

您可以使用数组作为 str_replace() 的输入:

$order = array("'", "\'","\r\n", "\n", "\r");
$replace = array("&acute;","&acute;","<br />","<br />","<br />");
$string = $news;
$insert = str_replace($order, $replace, $string);

是的,转义的 \' 可能来自您的数据库代码。使用 stripslashes() 删除它们。

于 2013-05-02T12:50:32.517 回答
0

您可以简单地使用该功能stripslashes

    stripslashes($string);

看看官方文档

    <?php
        $str = "Is your name O\'reilly?";

        // Outputs: Is your name O'reilly?
        echo stripslashes($str);
    ?>
于 2013-05-02T12:51:29.147 回答
0

在将数据插入数据库时​​,使用函数html_entity_decode以特殊字符解码 html 部分。

当您回显时,请使用函数htmlspecialchars。这与上述功能相反,您不会遇到任何问题。

于 2013-05-02T12:54:08.403 回答
0

我正在通过表格在我的网站上输入新闻。在添加新闻或编辑新闻时,\r 或 \n 被替换为 br。

您发布的代码将起作用(至少是最后一部分)。然而 PHP 有一个专门用于此目的的函数 - nl2br()

现在我还有一个问题,例如当我写“I've”时,它会像 I\'ve 一样打印出来。

这是由于不推荐使用名为魔术引号的 PHP 配置设置,它会自动转义 GET 或 POST 数据。如果您已经使用 mysql_real_escape_string 转义变量,您可以安全地禁用魔术引号。您永远不必对从数据库中提取的数据调用 stripslashes()。

于 2013-05-02T12:55:56.163 回答