PHP使用换行符从textarea保存内容

Posted

技术标签:

【中文标题】PHP使用换行符从textarea保存内容【英文标题】:PHP save content from textarea with newline 【发布时间】:2017-01-24 12:31:54 【问题描述】:

这可能真的很愚蠢,但我尝试使用 php 将 texarea 中的内容保存到 mysql 中。通常换行符保存在数据库中。但突然它们被删除了。

我使用 jquery 通过 ajax 将值发送到 PHP,然后我在 PHP 中执行此操作:

$var   = strip_tags( $_POST["var"] );
$db->query("UPDATE table SET var='$var' WHERE id=$id")

不知何故,换行符在输入的过程中丢失了。如果我在 var 上执行 nl2br,那么它们将被转换为 <br/>,因此在我运行查询之前 $var 包含换行符。

更新,增加陌生感。如果我真的在 $var 上运行 nl2br,然后用换行符替换 br-tags,在更新表之前,一切都很好,这是怎么回事?!?

这工作得很好:

$var   = strip_tags( $_POST["var"] );
$var = nl2br($var);    
$var = preg_replace('#<br\s*/?>#i', "\n", $var);
$db->query("UPDATE table SET var='$var' WHERE id=$id");

【问题讨论】:

您在数据库本身中看到换行符吗?也许你应该在渲染方面使用 nl2br。 使用 nl2br。比如 $var = nl2br(strip_tags( $_POST["var"] )); 不,我没有在数据库中看到换行符。如果我在渲染端运行 nl2br,则不会出现 -s。 @Anant,我不想在数据库中保存 。 你的数据库中var的类型是什么? 【参考方案1】:

我再次查看了 Zebra(这次是源代码),正如之前的评论中提到的,这正是删除换行符的原因。 Zebra 包中的逃生方法使用: http://php.net/manual/en/mysqli.real-escape-string.php

这意味着以下内容被删除: NUL (ASCII 0)、\n、\r、\、'、" 和 Control-Z。

【讨论】:

【参考方案2】:

您可以尝试在以下位置添加输入:

<pre></pre> 

这会将您的输入保存为数据库中的预格式化文本。

参考:https://www.w3.org/wiki/html/Elements/pre

nl2br 也是一个很好的解决方案,使用你喜欢的任何一个。 还要确保您为数据库列使用正确的配置。它应该是 VARCHAR 或 TEXT。

【讨论】:

这并不能真正解决问题。我的问题是保存时删除了 \n 。我不想将 html 与文本一起保存。【参考方案3】:

我认为您的问题是换行符在传递到服务器之前被删除。

您提到它是通过 jQuery 发送的,因此请确保在发送到服务器之前没有任何客户端处理。

【讨论】:

奇怪的是,如果我在运行查询之前执行 nl2br($var),那么我会得到 -tags。所以我想知道当我实际运行查询时是否删除了换行符?我使用 Zebra_database 包装器。如果我例如。进入 PhpMyAdmin 编辑文本,然后保留换行符。所以数据库或数据类型没有问题。 我快速查看了 Zebra 文档,似乎 update() 方法调用了 escape(),其中:“转义要在 SQL 语句中使用的字符串中的特殊字符,以便防止 SQL 注入。此方法还将给定的字符串括在单引号中!" stefangabos.ro/wp-content/docs/Zebra_Database/Zebra_Database/… 这就是你的换行符被删除的原因。 啊哈,我有一种感觉,这就是问题所在,不久前我切换到 Zebra_database。我想知道保持换行符的最佳做法是什么? 我个人更喜欢 PDO 和绑定参数,而不是转义 SQL 字符串。

以上是关于PHP使用换行符从textarea保存内容的主要内容,如果未能解决你的问题,请参考以下文章

javascript/html/php 捕获 textarea 中的换行符

vue 解析 textarea 换行符

从 textarea flex3 中保存空格和换行符

用换行符保存的 textarea 无法按创建返回到我的项目的前端,如何解决?

使用 php 读取文件时删除文本区域中的换行符

.txt 文件中的 textarea 内容,但保留换行符