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

PHP+JS天气网站单词城市查询正常,多词城市无结果求助

问题根源

多词城市名里的空格是核心问题——直接把带空格的字符串拼进API URL时,空格会被识别成URL的分隔符,导致请求地址不符合API要求;而你手动测试时应该是把空格换成了%20或+,所以API能正常返回数据。

解决办法

前端JS处理

在将用户输入的城市名传给后端前,先对字符串做URL编码:

// 假设用户输入的城市名存在inputVal变量中
const encodedCity = encodeURIComponent(inputVal);
// 用编码后的字符串发起请求
fetch(`weather.php?city=${encodedCity}`)
  .then(response => response.json())
  .then(data => { /* 处理返回的天气数据 */ });

如果是用表单提交,GET方法下浏览器会自动编码参数;但如果是手动拼接URL,必须手动做编码处理。

后端PHP处理

如果前端没做编码,后端也可以补处理(更推荐前端先编码,后端做二次加固):

// 获取并清洗用户传入的城市参数
$city = isset($_GET['city']) ? trim($_GET['city']) : '';
// 对城市名做URL编码后拼入API地址
$encodedCity = urlencode($city);
$apiUrl = "https://api.openweathermap.org/data/2.5/weather?q={$encodedCity}&appid=你的API密钥";
// 发起API请求并解析结果
$apiResponse = file_get_contents($apiUrl);
$weatherData = json_decode($apiResponse, true);

关键注意事项

  • 必须确保城市名在拼入API URL前完成编码,将空格转换为%20(URL标准编码格式)
  • 不要直接用用户输入的原始字符串拼接URL,除了多词城市名失效问题,还可能引发URL注入等安全风险

内容的提问来源于stack exchange,提问作者Aamir M Zobayer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:04:59