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

PHP rawurlencode编码与浏览器不一致,如何实现同浏览器编码?

问题:PHP编码与浏览器URL编码不一致导致API无法识别

当在浏览器地址栏输入字符串 DIN 2080 Fräseraufnahmen SK 30 时,浏览器会将其编码为 DIN%202080%20Fr%C3%A4seraufnahmen%20SK%2030,该编码可被目标API正常识别。但在调用同一API的PHP脚本中,使用 rawurlencode() 函数对该字符串编码后,得到的结果为 DIN%202080%20Fra%CC%88seraufnahmen%20SK%2030,API无法将此编码识别为有效匹配项。

编码结果对比

  • 浏览器编码结果:DIN%202080%20Fr%C3%A4seraufnahmen%20SK%2030
  • PHP rawurlencode() 编码结果:DIN%202080%20Fra%CC%88seraufnahmen%20SK%2030

问题原因与解决方案

经进一步排查,问题由PHP Composer的自动加载器导致。解决方法是先通过Normalizer::normalize()将字符串转换为**NFC(标准等价合成)**格式(对应常量Normalizer::FORM_C),再执行rawurlencode()编码,即可得到与浏览器一致的编码结果。

测试验证

测试代码示例:

<?php
require_once(__DIR__ . '/vendor/autoload.php');
echo '<pre>' . rawurlencode($_GET['a']) . '</pre>';
echo '<br />';
echo '<pre>' . rawurlencode(Normalizer::normalize($_GET['a'], Normalizer::FORM_C)) . '</pre>';

调用该脚本:/test.php?a=ä

输出结果如下:

  • 直接使用rawurlencode()的输出:a%CC%88
  • 先归一化再编码的输出:%C3%A4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:18