本文目录导读:

- 推荐方案:使用 mb_substr()(多字节字符串函数)
- 兼容 GBK 编码
- 安全检测并启用 mbstring 扩展
- 自定义兼容函数(完全替代方案)
- WordPress 风格的截取函数
- 配置 php.ini 确保 mbstring 可用
- 完整的工具类示例
- 注意事项:
在PHP项目中实现字符串截取并兼容中文,推荐使用以下方法:
推荐方案:使用 mb_substr()(多字节字符串函数)
// 基本用法
$text = "Hello世界,PHP字符串截取测试";
$result = mb_substr($text, 0, 10, 'UTF-8');
echo $result; // 输出:Hello世界,P
// 参数说明:mb_substr(字符串, 起始位置, 长度, 编码)
$text = "你好世界Hello";
$sub = mb_substr($text, 2, 4, 'UTF-8');
echo $sub; // 输出:世界He
// 截取并添加省略号
function mb_substr_with_ellipsis($str, $length, $encoding = 'UTF-8') {
if (mb_strlen($str, $encoding) > $length) {
return mb_substr($str, 0, $length, $encoding) . '...';
}
return $str;
}
$longText = "这是一段很长的中文文本,需要截取显示...";
echo mb_substr_with_ellipsis($longText, 10); // 输出:这是一段很长的中文文本...
兼容 GBK 编码
// 处理GBK编码的中文 $text = "你好世界Hello"; $sub = mb_substr($text, 0, 4, 'GBK'); echo $sub; // 输出:你好世
安全检测并启用 mbstring 扩展
// 检测 mbstring 扩展是否可用
if (function_exists('mb_substr')) {
$result = mb_substr($text, 0, 10, 'UTF-8');
} else {
// 降级处理:使用自定义函数
$result = utf8_substr($text, 0, 10);
}
// 自定义 UTF-8 截取函数(备选方案)
function utf8_substr($str, $start, $length = null) {
return mb_substr($str, $start, $length, 'UTF-8');
}
自定义兼容函数(完全替代方案)
/**
* 兼容中文字符串截取
*/
function safe_substr($str, $start, $length = null, $encoding = 'UTF-8') {
if (function_exists('mb_substr')) {
return mb_substr($str, $start, $length, $encoding);
}
// 不使用 mbstring 时的备选方案
return iconv_substr($str, $start, $length, $encoding);
}
// 更完善的版本(处理省略号)
function truncate_chinese($string, $length = 30, $ellipsis = '...') {
if (mb_strlen($string, 'UTF-8') <= $length) {
return $string;
}
return mb_substr($string, 0, $length, 'UTF-8') . $ellipsis;
}
WordPress 风格的截取函数
/**
* 类似 WordPress 的 wp_trim_words 功能
*/
function chinese_trim_words($text, $num_words = 55, $more = '...') {
if (mb_strlen($text, 'UTF-8') > $num_words) {
$text = mb_substr($text, 0, $num_words, 'UTF-8') . $more;
}
return $text;
}
配置 php.ini 确保 mbstring 可用
; 在 php.ini 中启用 extension=mbstring ; 设置默认编码 mbstring.language = Neutral mbstring.internal_encoding = UTF-8 mbstring.http_input = UTF-8 mbstring.http_output = UTF-8
完整的工具类示例
class StringHelper {
/**
* 安全的字符串截取
*/
public static function substr($string, $start, $length = null, $encoding = 'UTF-8') {
if (function_exists('mb_substr')) {
return mb_substr($string, $start, $length, $encoding);
}
return substr($string, $start, $length);
}
/**
* 获取字符串长度
*/
public static function strlen($string, $encoding = 'UTF-8') {
if (function_exists('mb_strlen')) {
return mb_strlen($string, $encoding);
}
return strlen($string);
}
}
// 使用示例
echo StringHelper::substr("中文测试English", 0, 6); // 输出:中文测试En
注意事项:
- 始终指定编码参数,避免依赖系统默认编码
- 确保服务器已安装 mbstring 扩展
- UTF-8 是最常用的编码,建议统一使用
- 注意截取长度单位:mb_substr 是按字符数,不是字节数
- 处理省略号时要考虑字符数变化
使用 mb_substr() 是最稳定、最兼容的方案,它能正确处理各种多字节编码的中文、日文、韩文等字符。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播