我通过表单在我的网站上输入新闻。 在添加新闻或编辑新闻时,\ 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);
我几乎可以肯定这不是正确的方法,因为它们都分配给相同的变量,... 有人能指出我正确的方向吗?
修改:虽然这样可行,但我可以“像这样编码吗?”
编辑:谢谢大家的回答,问题现在解决了! :)
答案 0 :(得分:2)
是的,这不是正确的方法。
首先应确保在html和数据库中使用一致的字符集。接下来,请记住神奇的规则:永远不要清理输入,始终清理输出。
即。您放入数据库的数据的唯一更改应该是mysql_real_escape_string()(或使用绑定参数)。要输出到浏览器,请使用htmlentities() - 不要尝试编写自己的版本。除非没有适当的方法可以有效地逃避内容,否则不要使用striplahses。
此外,请确保在PHP中禁用无处不在的添加。
答案 1 :(得分:0)
您可以使用数组作为str_replace()的输入:
$order = array("'", "\'","\r\n", "\n", "\r");
$replace = array("´","´","<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()。