can't replace \n in php with content from database

Max*_*axQ 5 php codeigniter str-replace

I try to avoid asking stupid questions, but this for some reason is just not working. I'm retrieving some text from a database, with newlines included. When using echo straight away, this is the output:

=== BOLD TEXT ===\nHere is some text.
Run Code Online (Sandbox Code Playgroud)

This is how i retrieved it:

$row = $query->row();
$content=$row->course_content;
Run Code Online (Sandbox Code Playgroud)

以下都没有任何影响......

$content= str_replace(array("\r\n", "\r", "\n"), "<br />", $content); 
$content= str_replace("\n", " ", $content);
$content = nl2br($content);
Run Code Online (Sandbox Code Playgroud)

但是,当我将它硬编码为原始语句的字符串时,

$content="=== BOLD TEXT ===\nHere is some text.";
Run Code Online (Sandbox Code Playgroud)

砰!它有效......关于为什么它拒绝接受数据库输入的任何想法,但手动字符串没问题?

完整代码:

//Switch between these two:
$row = $query->row();
$content=$row->course_content;
$content="=== BOLD TEXT ===\nHere is some text.";
$content = str_replace(array("\r\n", "\r", "\n"), "<br />", $content); 
$content = str_replace("\n", " ", $content);
$content = nl2br($content);     
echo $content;
Run Code Online (Sandbox Code Playgroud)

Pat*_*k M 5

当你这样做时:

$row = $query->row();
$content=$row->course_content;
echo $content;
Run Code Online (Sandbox Code Playgroud)

你真的看到\n打印到输出了吗?或者它实际上打印了一个新行字符?

如果是前者,那么数据库字符串中有转义换行符,而不是实际的换行符。换句话说,您的数据库字符串包含两个字符\n,这不是换行符。

请尝试使用此替代品(或除此之外,为了完全安全):

$content = str_replace(array('\r\n', '\r', '\n'), "<br />", $content); 
Run Code Online (Sandbox Code Playgroud)

字符串的单引号语法导致 php 不会将这两个字符转换\n换行符,因此它实际上应该与数据库中的内容匹配。(您还可以使用\\n,其中第一个斜杠转义第二个斜杠,防止它变成换行符。)

编辑:要回答你的问题,假设你的意思是mysql_real_escape_string,那么是的,这是预期的行为。从文档中:

mysql_real_escape_string()调用 MySQL 的库函数 mysql_real_escape_string,该函数在以下字符前面添加反斜杠:\x00\n\r\ 、 '"\x1a