Php str\u ireplace或preg\u replace替换的break标记插入\r\n
我读过关于在php中将html break标记转换为新行的讨论。其他人说这是他们的工作,但我身上发生了一些奇怪的事情 这是我使用的代码:Php str\u ireplace或preg\u replace替换的break标记插入\r\n,php,html,Php,Html,我读过关于在php中将html break标记转换为新行的讨论。其他人说这是他们的工作,但我身上发生了一些奇怪的事情 这是我使用的代码: $breaks = array("<br />", "<br>", "<br/>"); $jawaban = str_ireplace($breaks, " ", $jawaban1);` 总有一些事情可以挽救我的一天,这实际上是一个解决办法,你的问题是我深入这件事的一个触发
$breaks = array("<br />", "<br>", "<br/>");
$jawaban = str_ireplace($breaks, " ", $jawaban1);`
总有一些事情可以挽救我的一天,这实际上是一个解决办法,你的问题是我深入这件事的一个触发器-一劳永逸 现在,您可以开始了-漂亮、圆滑的解决方案: 已经有一个函数可以替换新行字符之前的insert
标记:
示例(代码板):
尝试使用preg\u replace()
函数,无需使用\n\r
这两种功能,您只需使用\n
或PHP\u EOL
即可
$jawaban = preg_replace('#<br\s*?/?>#i', "\n", $jawaban1);
$jawaban=preg#u replace(“##i”、“\n”、$jawaban1);
或
$jawaban=preg#u replace('i',PHP#u EOL,$jawaban1);
您的问题是mysqli\u real\u escape\u string()。将“\r\n”转换为字符串,以便安全地输入数据库。完全移除它。当您输出到屏幕时,请使用htmlspecialchars
:
echo htmlspecialchars($myUnsafeVar);
应用这些规则(作为起点,始终存在可能的例外情况,但在极少数情况下):
- 将字符串输入数据库时,请使用
mysqli\u real\u escape\u string
。当输出到屏幕时,它不会做您期望的事情-所以任何已经被mysql转义()的内容都不应该出现在屏幕上
- 在输出到屏幕时使用
htmlspecialchars
(您没有!)
- 使用
url\u encode
将内容添加到url中
- 还有许多不同的“转义”函数(例如插入JSON、插入mysql、插入其他数据库)。根据你的需要使用合适的,不要把它用于其他目的
查看函数以了解更多详细信息
就目前情况而言,即使付出了这么多努力,您的代码也不安全——但修复起来真的很简单 在使用字符串之前,您必须了解这些信息:
“\n\r”表示新行
“\n\r”不是新行
代码>并不意味着换行。这只是HTML符号的HTML编号。当您使用它时,您的意思是只是在浏览器中显示\n\r。这是对你问题的回答:
两者都在文本中插入“\r\n”,为什么会发生这种情况
因此,在了解了这一点之后,您理解:
如果您的$jawaban1字符串是
Hello <br> and welcome!
没有任何\n\r,只在浏览器中显示如下内容:
Hello and welcome!
Hello \n\r and welcome!
如果要将所有br替换为\n\r,请使用问题中的代码:
$breaks = array("<br />", "<br>", "<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
在此之后,您希望将br替换为\n\r。这就像做和撤销一样。我看到您试图在textarea元素中再次显示它。因此,不要用br替换\n\r。解决方案是什么?根本不更改\n\r,如果要将其保存到数据库,请使用\r\r将其保存。当您需要它在textarea元素之外显示时,只需使用nl2br函数。您是否尝试过PHP_EOL?str_replace(“
”,PHP_EOL,$textarea);仍然有相同的结果,\r\n仍然包括和#13
基本上与\r\n
相同–它们都表示相同的字节值,只是在不同的上下文中。但上面显示的两个代码片段不可能产生相同的输出。很可能你只是把结果解释错了。(它在屏幕显示的文本区域中显示的内容不能是原始数据,因为这样\r\n就不会显示为这些字符。)编辑:添加我使用的回显结果的代码“不”,但仍然不起作用,谢谢你提供的信息不,这是一个绝对正确的答案。你又做错了什么。看见请提供您用于生成示例的代码。这与Haresh Vidja的答案相结合是完整的解决方案。
$breaks = array("<br />", "<br>", "<br/>");
$jawaban = str_ireplace($breaks, " ", $jawaban1);
Hello and welcome!
Hello \n\r and welcome!
$breaks = array("<br />", "<br>", "<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
$unsafejawabanfirst = nl2br($jawabannotcut);