我尽量避免提出愚蠢的问题,但出于某种原因,这是行不通的。我正在从数据库中检索一些文本,其中包括换行符。直接使用 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;
最佳答案
当你这样做时:
$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() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \ , ', " and \x1a.
关于php - 无法用数据库中的内容替换 php 中的\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277769/