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

如何在PHP中正确打印ñ、é等特殊字符?

问题原因

UTF-8编码下,ñ、é这类非ASCII字符占2个字节,PHP原生的字符串下标访问(比如$letters[1])是按字节而非字符定位的,所以你取到的是第一个字符ñ的第二个字节,属于无效的UTF-8序列,输出就会显示�。

解决办法

方法1:使用多字节安全的截取函数(推荐)

利用mb_substr函数(需确保PHP启用了mbstring扩展,绝大多数环境默认开启),它能按字符而非字节处理字符串:

<?php
// 先设置输出编码为UTF-8,避免页面显示乱码
header('Content-Type: text/html; charset=utf-8');

$letters='ñéáóúí';
// 参数:字符串、起始字符位置、截取长度、编码
$targetLetter = mb_substr($letters, 0, 1, 'UTF-8');
echo $targetLetter; // 输出ñ
?>

如果要取第二个字符é,把起始位置改成1即可:mb_substr($letters, 1, 1, 'UTF-8')。

方法2:将字符串转为多字节数组(PHP 7.4+)

使用mb_str_split直接把字符串拆成单个字符的数组:

<?php
header('Content-Type: text/html; charset=utf-8');

$letters='ñéáóúí';
$letterArray = mb_str_split($letters, 1, 'UTF-8');
echo $letterArray[0]; // 输出ñ
echo $letterArray[1]; // 输出é
?>

方法3:兼容旧版本PHP的数组转换方式

如果你的PHP版本低于7.4,可以通过编码转换间接实现:

<?php
header('Content-Type: text/html; charset=utf-8');

$letters='ñéáóúí';
// 转成UTF-16LE(每个字符占2字节)
$utf16Str = mb_convert_encoding($letters, 'UTF-16LE', 'UTF-8');
// 按2字节拆分数组
$letterArray = str_split($utf16Str, 2);
// 转回UTF-8
$targetLetter = mb_convert_encoding($letterArray[0], 'UTF-8', 'UTF-16LE');
echo $targetLetter; // 输出ñ
?>

额外注意事项

  • 确保你的PHP文件本身以UTF-8无BOM格式保存,否则字符串内容可能在定义时就已经乱码。
  • 页面输出时必须指定UTF-8编码,要么用PHP的header函数,要么在HTML中添加<meta charset="UTF-8">标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:05:24