htmlspecialchars() 或 如何以及在何处使用?

Posted

技术标签:

【中文标题】htmlspecialchars() 或 如何以及在何处使用?【英文标题】:How and where exactly is htmlspecialchars() or to be used?htmlspecialchars() 或 如何以及在何处使用? 【发布时间】:2017-05-26 15:29:47 【问题描述】:

htmlspecialchars() 何时准确使用?

我知道 laravel 会自动转义,但我有一个案例我不知道如何实现 - 请参阅“视图”示例,所以我会改用 htmlspecialchars() 。据我所知,每次输出以前存储在数据库中的信息时都应该使用它,但就我而言,我也有图片,它们存储在服务器上的文件夹中。一旦用户尝试上传图片,他就会收到错误消息(红色<div>),其中包含成功/未成功上传图片的名称。那需要转义吗?我不知道是否应该转义视图信息。为了让错误消息仍然保持红色,我决定在控制器中使用 htmlspecialchars(),我认为这是非常错误的?

控制器

                        if (......)
                            
                            $msgs[] = '<div style="color:red">Could not upload: ' . htmlspecialchars($_FILES['image']['name'][$key]) . ' - picture size should be less than 10MB, in the following formats: jpg, jpeg, gif, png, bmp.</div>';
                            
                        else
                            
                            $fileToMove = $_FILES["image"]["tmp_name"][$key];
                            $newFileLoc = 'images' . DIRECTORY_SEPARATOR . time() . $_FILES['image']['name'][$key];
                            move_uploaded_file($fileToMove, $newFileLoc);
                            $msgs[] = '<div>Picture ' . htmlspecialchars($_FILES['image']['name'][$key]) . ' has been successfully uploaded to the gallery!</div>';
                            
                        

【问题讨论】:

参考:php.net/manual/en/function.htmlspecialchars.php when to use htmlspecialchars() function?的可能重复 不,不是,但谢谢 您手动编写的 90% 已经在 Laravel 中以某种方式实现,例如文件上传(包括验证)、文件夹结构列表、路由文件中的整个路由魔术都是错误的,应该在中间件中.请务必从上到下阅读整个文档;只是为了你自己。 谢谢,会做的 【参考方案1】:

在内部,当您在刀片语法中使用 时,我相信它会调用e() 方法。因此,您应该使用e($someString),而不是使用htmlspecialchars($someString)

您应该在任何时候将数据放到您的页面上,而这些数据之前已由用户提交到您的系统。

【讨论】:

谢谢,这很有帮助,但我也可以在控制器或视图中使用它吗?你觉得我在Controller中使用的方式还可以吗? 您可以在任何地方使用e(),是的,您在控制器中使用它的方式对我来说看起来不错,尽管正如您所说,它可能会被清理一点,因为您的控制器和视图双方似乎都在踩对方的脚趾。

以上是关于htmlspecialchars() 或 如何以及在何处使用?的主要内容,如果未能解决你的问题,请参考以下文章

htmlspecialchars() - 如何以及何时使用和避免多次使用

呈现集合抛出“htmlspecialchars() 期望”我如何像 Eloquent 集合一样重新编辑它 [关闭]

如何修复 htmlspecialchars() 期望参数 1 是字符串,给定数组

PHP表单安全过滤和防注入 htmlspecialchars() 和test_input()

laravel 报错htmlspecialchars() expects parameter 1 to be string, object given

PHP如何防止XSS攻击