解决url中的& amp;带来的问题, laravel页面

首先, 你是否也在laravel中写了类似这样的js呢:

$.get("{{route('admin.user.index', array_merge($data, ['__sort__Exp'=>'desc']))}}");

//or

document.URL="{{route('admin.user.index', array_merge($data, ['__sort__Exp'=>'desc']))}}";

结果报错了, 打印下传过来的参数显示: 除第一个每个参数外, 每个前面都加了个amp; 为什么会这样呢?

于是, 我又在js console.log下, 看看前端传的url到底是什么样的:

console.log("{{route('admin.user.index', array_merge($data, ['__sort__Exp'=>'desc']))}}")

console.log结果如下: 可以看到前端传之前, 参数前就已经存在amp;了

这么看来是请求之前默认给处理了, 这里我先故意打印一个错误语法, 比如数组当字符:

console.log("{{array_merge($data, ['__sort__Exp'=>'desc'])}}");

报错显示为:

我可没用这个函数啊, 怎么回事呢, 这次看下laravel缓存的页面, 在storage/framework/views下, 看看原生php到底是什么:

console.log("<?php echo e(array_merge($data, ['__sort__Exp'=>'desc'])); ?>");

注意这里有个e函数,想必就是它进行转义了, 再来看下这个e函数张什么样:

    /**
     * Escape HTML entities in a string.
     *
     * @param  \Illuminate\Contracts\Support\Htmlable|string  $value
     * @return string
     */
    function e($value)
    {
        if ($value instanceof Htmlable) {
            return $value->toHtml();
        }

        return htmlentities($value, ENT_QUOTES, 'UTF-8', false);
    }

这下总算真相了, laravel中的{{}}双花括号最终会用htmlentities函数.

最后解决办法, 就是不用{{}}双花括号, 我们可以这样写来避免url转义:

console.log("{!! route('admin.user.index', array_merge($data, ['__sort__Exp'=>'desc'])) !!}");
 //or
console.log("<?php echo route('admin.user.index', array_merge($data, ['__sort__Exp'=>'desc']));?>");

题外: 话说我标题中的&amp怎么变成&了, 又被转义了, ?, 有空再看看吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值