Laravel/PHP:MySQL之间的文本丢失空白,并在文本区域中回显


Laravel/PHP: Text losing whitespace between MySQL and echoing in a textarea

注意:我使用的是Laravel 5.1。我目前无法判断这是否与Laravel有关,它在我的本地机器上运行良好,代码与服务器上的代码完全相同。所以可能与服务器有关。我已经提供了我能想到的尽可能多的信息。

我有一个用户可以填写的文本区域,很像这个论坛上的文本区域。当我试图从数据库中重新填充该文本区域进行编辑时,会丢失多行新行。

数据库显示:

[b]some text[/b]'r'n
A: More text'r'n
'r'n
[b]other text[/b]'r'n
A: More other text'r'n

当我把它放回文本区输入时,它仍然有新行,但丢失了两条新行:

[b]some text[/b]
A: More text
[b]other text[/b]
A: More other text

我在没有使用blade escape语法(只是一个普通的echo)的情况下尝试过这一点,得到了相同的结果。

事实上,我根本不知道它什么时候会失去白色空间。以下是一些示例,说明何时可以看到字符串有多个空格,何时不能看到。

dd($model);
// This shows with whitespace (/r/n) in both the attributes and originals array
dd($model->column);
// This shows the multiple new lines 'r'n
var_dump($model->column);
// This shows no new lines
return $model->column;
// simple return from the controller removes multiple white lines 
return Response::make($model->column);
// again just outputting the plain string multiple white lines are removed
<textarea>{!! $model->column !!}</textarea>
// of course the actual problem in a blade file, no extra spaces between lines are displayed in the textarea

更令人困惑的是,在《流浪者》中,白线保留得很好,只有在我的centos服务器上它们才丢失。代码是相同的,这让我认为它可能是mysql/php/server设置,但模型上的dd()显示了正确的空格,所以它显然从数据库中出来很好,当它是echo'd或var_dump'd时,字符串发生了一些事情(我不确定dd()使用了什么,我假设它是var_dump,也许不是)。

不过,它似乎在某种程度上与数据库有关,因为一个带有验证错误的表单会用多个新行重新填充文本区域。只有当从数据库中重新填充文本区域时,才会出现问题。

我在尝试使用nl2br搜索这个错误时发现的每一个结果都引用了它,这在这种情况下显然没有帮助。我不是想用html显示文本,我是想让用户使用文本区域提交表单,然后重新填充该文本区域,让他们稍后编辑提交的数据。因此,非常清楚的是,nl2br不是这种情况下的解决方案。

一年后,这再次引发了一个问题,最终发现,是Cloudflare的minimy html设置导致了这个问题。