Php str\u ireplace或preg\u replace替换的break标记插入\r\n

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, "&#13;&#10;", $jawaban1);` 总有一些事情可以挽救我的一天,这实际上是一个解决办法,你的问题是我深入这件事的一个触发

我读过关于在php中将html break标记转换为新行的讨论。其他人说这是他们的工作,但我身上发生了一些奇怪的事情

这是我使用的代码:

$breaks = array("<br />", "<br>", "<br/>");  
$jawaban = str_ireplace($breaks, "&#13;&#10;", $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 &#13;&#10; 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, "&#13;&#10;", $jawaban1);
    
    Hello &#13;&#10; and welcome!
    
    Hello \n\r and welcome!
    
    $breaks = array("<br />", "<br>", "<br/>");
    $text = str_ireplace($breaks, "\r\n", $text);
    
    $unsafejawabanfirst = nl2br($jawabannotcut);