Laravel中拼接URL并获取数据库JSON格式图片的问题
解决Laravel中图片URL JSON转义斜杠问题
嘿,这个转义斜杠的问题其实挺常见的,我来给你捋捋几种靠谱的解决办法:
方法一:用Eloquent访问器(推荐,更符合Laravel规范)
别在数据库层硬拼URL啦,Laravel的模型访问器能更优雅地处理这个问题。假设你的Post模型里存图片文件名的字段叫image_name,那你可以在模型里定义一个访问器:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { // 定义访问器,自动生成完整图片URL public function getImageurlAttribute() { // url()函数会自动根据当前应用URL生成完整路径,比硬写localhost更灵活 return url('/images/' . $this->image_name); } }
之后查询的时候直接获取模型数据,返回JSON就好:
$posts = Post::all(); return response()->json(['posts' => $posts]);
这样返回的JSON里的URL不会有多余转义,而且不管你的应用部署在什么域名下,URL都会自动适配,比硬拼域名靠谱多了。
方法二:保留数据库CONCAT,输出时关闭JSON斜杠转义
如果你一定要在数据库查询里用CONCAT拼接,那可以在返回JSON响应的时候,加上JSON_UNESCAPED_SLASHES参数,让Laravel不要转义斜杠:
use Illuminate\Support\Facades\DB; $posts = DB::table('posts') ->select(DB::raw("CONCAT('http://localhost:8000/images/', image_name) as imageurl")) ->get(); // 返回响应时关闭斜杠转义 return response()->json(['posts' => $posts], 200, [], JSON_UNESCAPED_SLASHES);
这样输出的JSON里的URL就会是"http://localhost:8000/images/1509695371.jpg"这种没有转义的格式了。
额外说明:JSON转义斜杠其实是合法的
顺便提一句,你之前看到的http:\/\/localhost...其实是符合JSON规范的转义格式,前端用JSON.parse()解析的时候会自动把转义斜杠还原成正常的斜杠,所以很多时候其实不需要特意处理。但如果就是想要视觉上更清爽的输出,上面两种方法都能搞定~
内容的提问来源于stack exchange,提问作者Hervera
相关产品推荐
相关产品推荐

