str_ireplace或preg_replace将break标记替换为\ r \n

Faj*_*raa 12 html php

我已经阅读过这篇文章,讨论如何将html break标记转换为php中的新行.其他人说这对他们有用,但有些奇怪的事发生在我身上.

这是我使用的代码:

$breaks = array("<br />", "<br>", "<br/>");  
$jawaban = str_ireplace($breaks, "&#13;&#10;", $jawaban1);`     
Run Code Online (Sandbox Code Playgroud)

这是他们使用的代码:

$breaks = array("<br />", "<br>", "<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
Run Code Online (Sandbox Code Playgroud)

两者都插入\r\n文本中,为什么会这样?
截图: 这是图片,找到了复活节彩蛋!

如果有任何以前的帖子/ PHP方法让我知道

编辑:添加我的代码回显文本框

<-- THIS WONT WORK -->
$username = $_SESSION['username'];
$unsafenomorsoal = $_POST['nomorsoal'];
$unsafejawaban = $_POST['jawaban'];
$nomorsoal = mysqli_real_escape_string($konek,$unsafenomorsoal);
$jawabannotcut = substr($unsafejawaban,0,50000);
$unsafejawabanfirst = nl2br($jawabannotcut);
$jawaban1 = mysqli_real_escape_string($konek,$unsafejawabanfirst);
$breaks = array("<br />","<br>","<br/>");
$jawaban = str_ireplace($breaks, PHP_EOL, $jawaban1);
$_SESSION['textvaluejawaban'] = $jawaban;
Run Code Online (Sandbox Code Playgroud)

这就是回应:

        echo "<div class=\"head-main-recent-background\"       style=\"background:white;width:99%;color:black;text-align:left;height:1000px;position:relative;top:130px;margin-top:10px;\">- Jawab   Soal -<br/>".$jawabanerror."<br/>Nama : ".$_SESSION['username']."<br/>
      <form method=\"post\" action=\"prosesjawabsoal.php\">
     <input type=\"hidden\" name=\"nomorsoal\"   value=\"".$_SESSION['nomorsoal']."\"/>
      Jawaban : <br/>
      <textarea placeholder=\"Max 40.000 Huruf\" style=\"overflow-  x:none;width:99%;height:300px;\" type=\"text\" name=\"jawaban\" maxlength=\"40000\" >".$_SESSION['textvaluejawaban']."</textarea>
       <br/>Captcha <br/>
            <div style=\"overflow:hidden;\" class=\"g-recaptcha\" data-   sitekey=\"6LfYQicTAAAAAFstkQsUDVgQ60x_93obnKAMKIM9\"></div><br/>
            <button type=\"submit\" name=\"submit\" style=\"margin-top:10px;height:auto;width:auto;\">Kirim Jawaban</button>
           </form>
            </div>";
Run Code Online (Sandbox Code Playgroud)

注意:该片段无法正常工作,因为它是php
抱歉我在发布代码时因错误而使用了片段!

编辑:
尝试preg_replace()方法但仍然相同的结果

复活节蛋发现! 代码404!

编辑:
更改标题告诉preg_replace不起作用

Rob*_*bie 7

你的问题是mysqli_real_escape_string().将"\ r \n"转换为字符串,以便安全地输入数据库.完全删除它.而是htmlspecialchars在输出到屏幕时使用:

echo htmlspecialchars($myUnsafeVar);
Run Code Online (Sandbox Code Playgroud)

应用这些规则(作为起点,总是存在例外,但在极少数情况下):

  • 使用mysqli_real_escape_string输入字符串到数据库时.输出到屏幕时它不会做你期望的 - 所以任何mysql escaped()的东西都不应该出现在屏幕上.
  • htmlspecialchars输出到屏幕时使用(你没有!).
  • 使用url_encode添加的东西到一个URL
  • 还有许多不同的"转义"功能(例如插入JSON,插入mysql,插入其他数据库).根据需要使用正确的 - 并且不要将其用于其他目的.

检查功能以获取更多详细信息.

目前看来,即使进行了所有这些努力,您的代码也不安全 - 但修复起来非常简单!


小智 -2

总有一些东西可以拯救我的一天,这实际上是一种解决方法,你的问题是我进一步深入研究这个问题的触发因素——一劳永逸。

现在,你可以 - 漂亮而时尚的解决方法:

已经有nl2br()函数可以替换<br>在换行符之前插入标签:

示例(键盘):

<?php
    // Won't work
    $desc = 'Line one\nline two';
    // Should work
    $desc2 = "Line one\nline two";
    echo nl2br($desc);
    echo '<br/>';
    echo nl2br($desc2);
?>
Run Code Online (Sandbox Code Playgroud)