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

如何避免Node.js notams.js API输出特殊符号被替换为问号?

解决notams.js API输出中度数符号乱码的问题

这问题我之前处理过类似的,本质就是字符编码不匹配导致的乱码——度数符号°是Unicode字符,一旦编码流程中某一步没跟上,就会变成�这种替换字符。咱们一步步来搞定:

核心思路:全程保持UTF-8编码一致

notams.js作为Node.js API,默认返回的是UTF-8编码的内容,所以PHP从调用API到输出展示,每一步都要确保用UTF-8处理。

1. 调用API时强制接收UTF-8编码

不管你用file_get_contents还是curl,都要明确告诉API你要UTF-8的响应,同时确保PHP正确解析响应编码:

// 用curl调用的示例(推荐用curl,更可控)
$ch = curl_init('你的notams.js API接口地址');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 发送请求头,指定接受UTF-8编码
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'Accept-Charset: utf-8'
]);
// 让curl自动处理响应的编码转换
curl_setopt($ch, CURLOPT_ENCODING, '');

$response = curl_exec($ch);
curl_close($ch);

// 检查响应是否为UTF-8,不是的话自动转换
if (!mb_check_encoding($response, 'UTF-8')) {
    $response = mb_convert_encoding($response, 'UTF-8', 'auto');
}

2. 处理响应内容时避免编码破坏

如果API返回的是JSON,json_decode本身只支持UTF-8编码的字符串,所以前面确保响应是UTF-8后,直接解析就行:

$notamList = json_decode($response, true);
// 这里直接操作$notamList里的内容就不会有编码问题

3. 输出时设置正确的字符集

不管是输出到浏览器还是保存到文件,都要明确声明UTF-8编码:

// 如果输出HTML
header('Content-Type: text/html; charset=utf-8');
// 如果输出JSON(比如作为接口返回)
header('Content-Type: application/json; charset=utf-8');

// 示例:遍历输出通告内容
foreach ($notamList as $notam) {
    echo $notam['通告内容字段'] . '<br>';
}

4. 额外排查点

  • 检查你的PHP文件本身的编码:确保.php文件是以UTF-8无BOM格式保存的,不然文件里的硬编码字符也会乱码。
  • 数据库存储(如果需要):如果要把内容存到数据库,确保表的字符集是utf8mb4(支持完整Unicode字符,包括特殊符号),并且数据库连接时指定UTF-8编码,比如PDO:
    $pdo = new PDO('mysql:host=localhost;dbname=你的数据库;charset=utf8mb4', '用户名', '密码');
    

总结

只要从API请求、内容处理到最终输出,全程都用UTF-8编码,度数符号°这类特殊字符就不会变成问号了。本质就是让整个流程的编码统一,别在中间环节出现编码转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:06:44