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

CodeIgniter3中硬编码波斯字符无法正常显示的问题求助

问题:波斯文URL、硬编码字符显示异常排查

现象汇总

  • 我用这段代码捕获当前页面URL:
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
  • 英文URL打印完全正常,但波斯文URL输出的是编码后的转义形式,比如:
  • 从数据库读取的波斯文字段能正常渲染,比如:
اینٹیک روینج
  • 但直接硬编码到PHP文件里的波斯字符,保存后就变成了一堆??????,快照示例:
اینٹیک روینج ------> 数据库读取的正常波斯文 -----> 硬编码到PHP文件的同一内容
  • 目前用urldecode(auto_link($url))可以正常对比URL部分和存储的别名,但我需要直接打印出正常显示的波斯文规范URL,而不是编码后的形式。

已配置的环境信息

  • 服务器系统:RHEL7
  • PHP版本:5.6
  • php.ini相关配置:
; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"
  • CodeIgniter 3的config.php配置:
$config['charset'] = 'UTF-8';
  • 编码声明已完成:HTML头部添加了编码标签,PHP代码里也加了header('Content-Type: text/html; charset="utf-8"');

解决方案建议

1. 解决硬编码字符变??????的问题

这通常是PHP文件本身的编码格式错误导致的——保存PHP文件时,必须确保文件是以UTF-8 (无BOM)格式存储的。很多编辑器默认可能用了ANSI或者带BOM的UTF-8,会直接破坏非ASCII字符:

  • 用编辑器(比如VS Code、Notepad++)打开你的PHP文件,查看当前编码,改成UTF-8 (无BOM)后重新保存;
  • 如果用FTP上传文件,要确保FTP客户端的传输模式是二进制,避免ASCII模式转换破坏编码。

2. 解决URL显示编码后的波斯文问题

$_SERVER['REQUEST_URI']本身就是URL编码后的字符串,直接拼接会输出转义形式。你需要拆分路径和参数分别处理,避免参数被错误解码:

// 拆分URL的路径和参数部分
$requestParts = explode('?', $_SERVER['REQUEST_URI'], 2);
$decodedPath = urldecode($requestParts[0]);
$urlParams = isset($requestParts[1]) ? '?' . $requestParts[1] : '';

// 拼接成最终的正常显示URL
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") 
       . "://{$_SERVER['HTTP_HOST']}{$decodedPath}{$urlParams}";

这样处理后,URL里的波斯文路径会被解码成正常显示的字符,同时参数部分保持原样。

3. 额外验证点

  • 检查数据库连接编码:确保CodeIgniter的数据库配置里也设置了UTF-8编码,比如在database.php里:
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';

(如果数据库支持utf8mb4,建议用utf8mb4和utf8mb4_unicode_ci,兼容性更好)

  • 确认服务器系统字符集:RHEL7下可以检查LANG环境变量,确保是en_US.UTF-8或其他UTF-8类型的locale,避免系统层面的编码干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:32:56