应使用 http_build_query() 拼接百度地图API URL,确保 query、location 等参数 URL 编码;location 格式为“纬度,经度”无空格;ak 必须后端配置;推荐 Guzzle 发起请求并校验 status=0 及 results 字段。

直接用 http_build_query() 拼 URL 就行,别手写字符串拼接 —— 否则中文、特殊字符一概乱码或 400 错误。
参数必须 URL 编码,尤其是 query 和 location
百度地图周边搜索 API 要求所有查询参数(特别是 query、region)必须经过 urlencode() 或 http_build_query() 处理。手动用 . 拼接 "&query=" . $keyword 是最常见翻车点,遇到“火锅”“ café”这类词必挂。
-
query值需先urlencode(),比如urlencode("地铁站") → "%E5%9C%B0%E9%93%81%E7%AB%99" -
location是"纬度,经度"字符串,不能含空格,逗号前后也不能有空格;若变量来自数据库,建议用sprintf("%.6f,%.6f", $lat, $lng)格式化 -
ak必须是后端配置的密钥,绝不能从前端传入或硬编码在控制器里
Symfony2 中推荐用 Guzzle 发起 GET 请求
别用 file_get_contents() 或 cURL 手动封装 —— 容易漏设超时、没处理重定向、不校验 HTTPS 证书。Guzzle 是 Symfony 生态事实标准,且支持异步和中间件。
调用百度PaddleOCR‑VL大模型API,支持PDF、Word、PPT、图片等多格式文档解析,精准识别印刷体、手写体、表格、公式、图表、印章等复杂元素,支持100+语言,可处理不规则布局和跨页长文档。触发词:文档解析、VLM解析、大模型OCR、PaddleOCR、多模态文档、手写识别、公式识别、复杂版面。
- 安装:
composer require guzzlehttp/guzzle:~6.0(Symfony 2.8 兼容) - 基础调用示例(放在 Controller 或 Service 中):
use GuzzleHttp\Client;
$client = new Client();
$baseUrl = 'http://api.map.baidu.com/place/v2/search';
$params = [
'query' => urlencode('便利店'),
'location' => sprintf('%.6f,%.6f', 39.915, 116.404),
'radius' => 500,
'output' => 'json',
'ak' => $this->container->getParameter('baidu_map_ak')
];
$response = $client->get($baseUrl . '?' . http_build_query($params), [
'timeout' => 5.0,
]);
$data = json_decode($response->getBody(), true);
注意:不要把 http_build_query() 放进 get() 的第二个参数(那是 headers/option 区),它属于 URL 查询字符串部分。
返回结果字段名大小写敏感,且 error_code 为 0 才算成功
百度 API 返回 JSON 中,顶层字段是 results(小写 s)、total、message,不是 Results 或 result。很多开发者用错 key 导致 Undefined index 报错。
- 务必先检查
$data['status']或$data['error_code']—— 文档写的是error_code,但实际 v2 接口返回的是status字段(0表示成功) -
results是数组,但可能为空([]),遍历时要先isset($data['results']) && is_array($data['results']) - 每个 POI 的坐标字段是
location.lat和location.lng(不是latitude/longitude),直接取会报 Notice
coord_type 参数容易被忽略:如果你传的是 GCJ-02 或 WGS-84 坐标,必须显式加 &coord_type=gcj02,否则百度按 BD-09 解析,位置偏移几百米 —— 这个坑在真实地理围栏场景里极难排查。


















