Laravel 截断带有特殊字符的字符串

Laravel truncating strings with special characters

我已经在 CMS 上工作了几个月,我面临着 laravel 截断某些特殊字符的各种挑战。我不得不将 CMS 中的编辑器从 bootstrap wysiwyg 更改为 ckeditor 事情变得相当好,因为它附带了一些高级转义选项。 例如,我能够防止 '"' 变成 '",这会导致整个字符串(段落)在找到此类编码的地方被截断。

然而,这是一个 CMS,用户有充分的理由输入范围广泛的字符,这些字符可以安全编码并保存在数据库中,以防特殊字符不可避免。例如,从可能包含任何这些字符的网站(非常允许)中选择一个嵌入;

/ = %2F 
: = %3A
# = %23
% = %25
? = %3F

当有人粘贴包含某些字符的 link 或尝试超 link 某些包含上述字符(不包括 %2F)的单词时,字符串将被截断。在各个级别进行检查后,我注意到字符串成功到达后端函数,然后在保存之前被截断。我不知道它的 Laravel (解析器)还是 MySql (我使用的数据库)截断这些字符串。这是一个特例;

当此 Facebook 嵌入时:

<iframe src="https://www.facebook.com/plugins/comment_embed.php?href=https%3A%2F%2Fwww.facebook.com%2Ftonyelumelu%2Fposts%2F10154627801036949%3Fcomment_id%3D10154629134011949&include_parent=false" width="560" height="201" style="border:none;overflow:hidden"
  scrolling="no" frameborder="0" allowTransparency="true">
</iframe>

在编辑器中粘贴 这是在数据库中找到的

<iframe src="https://www.facebook.com/plugins/comment_embed.php?href=https://www.facebook.com/tonyelumelu/posts/10154627801036949?comment_id=10154629134011949

仔细观察会发现字符串中的所有 '%2F' 都被替换为 '/' 但字符串在 '%3F' 处被截断了,应该被替换为 '?'或至少保持不变。

我知道这些是安全措施,但我已经对前端编辑进行了很多调整,我认为后端卫生应该留给我(如果我愿意)按照我想要的方式进行。在获得有关最佳实践的建议之前,我真的需要先知道如何停止这种烦人的行为。我只希望字符串按原样进入数据库而无需任何更改。提前致谢。

尝试重复错误

我创建了一条测试路线Route::any('/test', 'IndexController@test')->name('test');

然后 - 测试操作:

public function test(Request $request) {
    if($request->isMethod('post')) {
        $er = \App\Entity::create([
            'log' => $request->code,
        ]);


        exit('done');
    }

    echo "<form method=post>" . csrf_field() . 
         "<textarea name=code></textarea><input type=submit></form>";
}

结果

当我提交你的代码时,我可以在浏览器的网络选项卡中看到它没有改变

然后我去数据库看看代码也没有改变。

什么意思

不幸的是,我无法重现您在此处提出的错误。这意味着不是 Laravel 意外地转换了您的代码。尝试检查网络选项卡并 dd() 请求变量来检查它们。我想这个错误是在通过网络发送数据之前的某个地方。