我尽量避免提出愚蠢的问题,但出于某种原因,这只是不起作用。我正在从数据库中检索一些文本,包括换行符。当直接使用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;
答案 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中具有非常不同的含义。