php - 无法用数据库中的内容替换 php 中的\n

标签 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;

最佳答案

当你这样做时:

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

相关文章:

php - str_replace 没有按预期工作

javascript正则表达式忽略文本之间的条件

php - 在不使用单字字体的情况下,固定每个 <p> 的字符行数,这可能吗?

javascript - 没有收到有关 AJAX 成功的警报

php - 在 PHP 中使用 'global'

php - 如何加载两个 mo 文件以进行 gettext 本地化

javascript - 使用 Angular JS 和 CodeIgniter 创建基础项目

php - Codeigniter 插入多对多连接表/数据透视表

javascript - Looper.js 与 codeigniter 中的控件

php - 用表情符号或过滤词替换文本的单个 PHP 函数