You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9 Blade生成含/、@的谷歌地图URL异常问题咨询

Laravel Blade生成Google Maps经纬度直达链接问题修复

需求说明

需要基于经纬度生成同时包含/和@两个符号的Google Maps直达链接,目标URL格式示例:

https://www.google.com/maps/search/33.93911000,67.70995300/@33.93911000,67.70995300,5z

现存问题

原编写的Blade代码如下:

<a href="https://www.google.com/maps/search/?api=1&query={{ $country->lat }},{{ $country->long }}/@{{ $country->lat }},{{ $country->long }},5z" target="_blank">

运行后出现三个异常:

  • URL中的/符号被自动转码为%2F
  • @符号解析异常,输入单个@无法正常输出,需要输入@@才能输出单个@
  • 紧邻@的Blade模板变量未被正常解析,直接以{{ $country->lat}}的源码形式输出到页面
    实际错误输出示例:
https://www.google.com/maps/search/?api=1&query=33.93911000,67.70995300/@{{ $country->lat}},67.70995300,5z

问题原因

  • Blade模板引擎将@作为内置指令的起始标识符,当@符号和{{ }}变量输出语法紧邻时,引擎会将整段内容判定为自定义Blade指令,不会解析其中的变量表达式
  • 原代码冗余拼接了?api=1&query=查询参数,和目标URL的路径式格式不匹配,额外触发了URL编码逻辑
  • 直接在HTML属性中混合拼接特殊字符和Blade语法,容易触发引擎的自动转义逻辑

修复方案

推荐写法:PHP块预组装URL(无解析冲突)

在模板中先用PHP代码块拼接完整URL,彻底避开Blade语法和@符号的解析冲突,不会触发特殊字符转义:

@php
    // 提前拼接完整地图链接,所有变量在纯PHP环境下解析
    $mapUrl = sprintf(
        'https://www.google.com/maps/search/%s,%s/@%s,%s,5z',
        $country->lat,
        $country->long,
        $country->lat,
        $country->long
    );
@endphp
<a href="{{ $mapUrl }}" target="_blank">查看Google Maps位置</a>

极简写法:原生输出标签拆分拼接

如果不想单独写PHP块,可以使用Blade的原生无转义输出标签{!! !!},将@符号作为字符串拼接,不要让@和{{ }}语法直接相邻:

<a href="{!! 'https://www.google.com/maps/search/' . $country->lat . ',' . $country->long . '/@' . $country->lat . ',' . $country->long . ',5z' !!}" target="_blank">查看Google Maps位置</a>

注意:禁止将{{ }}直接写在@@转义符后方,该写法会被Blade引擎识别为未定义指令,导致变量无法解析。

内容的提问来源于stack exchange,提问作者wruckie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:18:15