不能用数据库中的内容替换php中的\ n

时间:2013-03-07 17:25:49

标签: php codeigniter str-replace

我尽量避免提出愚蠢的问题,但出于某种原因,这只是不起作用。我正在从数据库中检索一些文本,包括换行符。当直接使用echo时,这是输出:

=== BOLD TEXT ===\nHere is some text.

这就是我检索它的方式:

$row = $query->row();
$content=$row->course_content;

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

$content= str_replace(array("\r\n", "\r", "\n"), "<br />", $content); 
$content= str_replace("\n", " ", $content);
$content = nl2br($content);

但是,当我在字符串中将其硬编码到原始语句时,

$content="=== BOLD TEXT ===\nHere is some text.";

庞!它的工作原理......关于为什么它拒绝接受数据库输入的任何想法,但手动字符串是否正常?

完整代码:

//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;

2 个答案:

答案 0 :(得分:3)

执行此操作时:

$row = $query->row();
$content=$row->course_content;
echo $content;

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

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

尝试替换(或者除此之外,完全安全):

$content = str_replace(array('\r\n', '\r', '\n'), "<br />", $content); 

字符串的single quotes syntax会导致php无法将两个字符\n转换为换行符,因此它应该实际匹配数据库中的内容。 (你也可以使用\\n,第一个斜杠转义第二个斜杠,防止它变成换行符。)

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

  

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符: \ x00 \ n \ r \,' \ x1a

答案 1 :(得分:2)

$content="=== BOLD TEXT ===\nHere is some text.";

如果要替换\n,则应使用单引号搜索它 - '\n'(而不是"\n") - 这两者在PHP中具有非常不同的含义。