PHP 使用换行符保存 textarea 中的内容
PHP save content from textarea with newline
这可能真的很愚蠢,但我尝试使用 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 包含换行符直到我 运行 查询。
更新,增加陌生感。如果我实际上 运行 nl2br on $var,然后用换行符替换 br-tags,在更新 table 之前,一切都很好,这是怎么回事?!?
这工作正常:
$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");
您可以尝试将输入添加到:
<pre></pre>
这会将您的输入保存为数据库中的预格式化文本。
参考:https://www.w3.org/wiki/HTML/Elements/pre
nl2br 也是一个很好的解决方案,使用您喜欢的任何一个。
还要确保您为数据库列使用了正确的配置。它应该是 VARCHAR 或 TEXT。
我认为你的问题是换行符在传递到服务器之前被删除了。
您提到它是通过 jQuery 发送的,因此请确保在发送到服务器之前没有任何客户端处理。
我又看了一遍 Zebra(这次是源代码),正如之前评论中提到的,这正是换行符被删除的原因。 Zebra 包中的转义方法使用:
http://php.net/manual/en/mysqli.real-escape-string.php
这意味着删除了以下内容:
NUL (ASCII 0)、\n、\r、\、'、" 和 Control-Z。
这可能真的很愚蠢,但我尝试使用 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 包含换行符直到我 运行 查询。
更新,增加陌生感。如果我实际上 运行 nl2br on $var,然后用换行符替换 br-tags,在更新 table 之前,一切都很好,这是怎么回事?!?
这工作正常:
$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");
您可以尝试将输入添加到:
<pre></pre>
这会将您的输入保存为数据库中的预格式化文本。
参考:https://www.w3.org/wiki/HTML/Elements/pre
nl2br 也是一个很好的解决方案,使用您喜欢的任何一个。 还要确保您为数据库列使用了正确的配置。它应该是 VARCHAR 或 TEXT。
我认为你的问题是换行符在传递到服务器之前被删除了。
您提到它是通过 jQuery 发送的,因此请确保在发送到服务器之前没有任何客户端处理。
我又看了一遍 Zebra(这次是源代码),正如之前评论中提到的,这正是换行符被删除的原因。 Zebra 包中的转义方法使用: http://php.net/manual/en/mysqli.real-escape-string.php
这意味着删除了以下内容: NUL (ASCII 0)、\n、\r、\、'、" 和 Control-Z。