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

ISO字符集与UTF-8编码问题:$_REQUEST获取特殊字符异常

问题原因与解决方案

核心原因:编码混淆+自动转义

你遇到的是Windows-1252与ISO-8859-1(Latin-1)编码不匹配导致的字符映射错误,再叠加了自动HTML实体转义的效果:

  • 输入的Œ、œ、Ÿ、€这些字符属于Windows-1252编码的扩展ASCII范围(0x80-0x9F),而ISO-8859-1里这个区间是未定义的控制字符。当表单以Windows-1252编码提交,但PHP用ISO-8859-1解析$_REQUEST参数时,这些字节会被错误映射成ISO-8859-1的可见字符:0x80→¤、0x8C→¼、0x9C→½、0x9F→¾,完全对应你看到的输出。
  • 而…、≤、≥等字符变成HTML实体(比如…),是因为服务器或框架对请求参数自动执行了htmlspecialchars/htmlentities转义,把Unicode字符转换成了HTML实体格式。

修复步骤

  1. 统一编码为UTF-8(推荐)

    • 在提交表单的HTML页面头部添加:<meta charset="UTF-8">,确保表单以UTF-8编码提交。
    • 在PHP脚本开头设置响应编码:header('Content-Type: text/html; charset=UTF-8');,同时修改php.ini配置:default_charset = "UTF-8",让PHP默认用UTF-8解析请求和输出。
  2. 修复已错误解析的字符
    若暂时无法切换UTF-8,可将错误解析的字符串从ISO-8859-1转成Windows-1252再转UTF-8:

    $fixed_value = mb_convert_encoding($_REQUEST['some_value'], 'UTF-8', 'Windows-1252');
    
  3. 关闭/还原自动转义

    • 若因旧版PHP的magic_quotes_gpc导致转义,可在脚本开头处理:
      if (get_magic_quotes_gpc()) {
          $_REQUEST['some_value'] = stripslashes($_REQUEST['some_value']);
      }
      
    • 若为自动HTML实体转义,用html_entity_decode还原:
      $decoded_value = html_entity_decode($_REQUEST['some_value'], ENT_QUOTES, 'UTF-8');
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:11:17