我已阅读this post,讨论如何将html break标记转换为php中的新行。其他人说这对他们有用,但有些奇怪的事发生在我身上。
这是我使用的代码:
$breaks = array("<br />", "<br>", "<br/>");
$jawaban = str_ireplace($breaks, " ", $jawaban1);`
这是他们使用的代码:
$breaks = array("<br />", "<br>", "<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
如果有任何先前的帖子/ 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;
这就是回应:
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>";
注意:该代码段不起作用,因为它是php
抱歉,我在发布代码时因错误而使用了片段!
编辑:
尝试了preg_replace()方法,但结果仍然相同
编辑:
更改标题以告诉preg_replace不起作用
答案 0 :(得分:7)
你的问题是mysqli_real_escape_string()。将“\ r \ n”转换为字符串,以便安全地输入数据库。完全删除它。而是在输出到屏幕时使用htmlspecialchars
:
echo htmlspecialchars($myUnsafeVar);
应用这些规则(作为起点,总是存在例外情况,但在极少数情况下):
mysqli_real_escape_string
。输出到屏幕时它不会达到您的预期 - 因此任何mysql转义()的内容都不应出现在屏幕上。htmlspecialchars
(您没有!)。url_encode
将内容添加到网址检查功能以获取更多详细信息。
目前看来,即使付出了所有努力,您的代码也不安全 - 但修复起来非常简单!
答案 1 :(得分:2)
尝试使用preg_replace()
功能,您只需\n\r
或\n
PHP_EOL
$jawaban = preg_replace('#<br\s*?/?>#i', "\n", $jawaban1);
或
$jawaban = preg_replace('#<br\s*?/?>#i', PHP_EOL, $jawaban1);
答案 2 :(得分:2)
在使用字符串之前必须先了解这些内容:
不表示新行。它只是HTML符号的HTML编号。当您使用它时,您的意思是只需在您的浏览器中显示\ n \ r \ n。这是你的问题的答案:插入&#34; \ r \ n&#34;在文中,为什么会发生这种情况?
所以,在了解之后,您明白了:
如果你的$ jawaban1字符串是
Hello <br> and welcome!
,您的代码是
$breaks = array("<br />", "<br>", "<br/>");
$jawaban = str_ireplace($breaks, " ", $jawaban1);
这意味着,$ jawaban将完全像这样:
Hello and welcome!
没有任何\ n \ r \ n,只是您的浏览器显示如下:
Hello \n\r and welcome!
如果你想用\ n \ r \ n替换所有br,只需使用你问题中的代码:
$breaks = array("<br />", "<br>", "<br/>");
$text = str_ireplace($breaks, "\r\n", $text);
关于preg_replace()
当你可以使用str_ireplace时,不要使用preg_replace。 str_ireplace更快。
如果您不需要,请不要这样做
你在代码中做了这个:
$unsafejawabanfirst = nl2br($jawabannotcut);
之后你想用\ n \ n \ n替换br。它就像做和撤消一样。我看到你试图在textarea元素中再次显示它。所以不要用br代替\ n \ r。解决方案?根本不要改变\ n \ r \ n如果你想将它保存到数据库,只需用\ r \ n \ r保存它。当你需要它来
答案 3 :(得分:-2)
总会有一些东西可以挽救我的一天,这实际上是一种解决方法,而你的问题是让我更深入地了解这件事 - 一劳永逸。
现在,你走了 - 好看&amp;圆滑的解决方法:
已有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);
?>