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
相关产品推荐
相关产品推荐

