PHP - str_replace();

时间:2013-05-02 12:46:57

标签: php arrays

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

现在我还有一个问题,当我写“我已经”时,它会打印出来,我已经打印出来了。

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

现在我有这样的事情:

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

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

修改:虽然这样可行,但我可以“像这样编码吗?”

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

5 个答案:

答案 0 :(得分:2)

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

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

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

此外,请确保在PHP中禁用无处不在的添加。

答案 1 :(得分: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()删除它们。

答案 2 :(得分:0)

您可以简单地使用函数stripslashes

    stripslashes($string);

查看官方documentation

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

        // Outputs: Is your name O'reilly?
        echo stripslashes($str);
    ?>

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

  

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

您发布的代码将起作用(至少是最后一部分)。但是,PHP具有专门用于此目的的功能 - nl2br()

  

现在我还有一个问题,当我写“我已经”时,它会打印出来,我已经打印出来了。

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