Php 实现substr功能
实现字符串截取功能
在PHP中,substr是一个内置函数,用于截取字符串的一部分。如果需要手动实现类似功能,可以参考以下方法:
基本实现方法
function custom_substr($string, $start, $length = null) {
$str_length = strlen($string);
// 处理负数起始位置
if ($start < 0) {
$start = max(0, $str_length + $start);
}
// 处理超出范围的起始位置
if ($start >= $str_length) {
return '';
}
// 处理未指定长度的情况
if ($length === null) {
$length = $str_length - $start;
}
// 处理负数长度
elseif ($length < 0) {
$length = max(0, $str_length - $start + $length);
}
$result = '';
for ($i = $start; $i < $start + $length && $i < $str_length; $i++) {
$result .= $string[$i];
}
return $result;
}
处理多字节字符
如果需要支持多字节字符(如中文),可以使用mb_substr函数,或者实现多字节版本:
function mb_custom_substr($string, $start, $length = null, $encoding = 'UTF-8') {
$str_length = mb_strlen($string, $encoding);
if ($start < 0) {
$start = max(0, $str_length + $start);
}
if ($start >= $str_length) {
return '';
}
if ($length === null) {
$length = $str_length - $start;
}
elseif ($length < 0) {
$length = max(0, $str_length - $start + $length);
}
$result = '';
for ($i = $start; $i < $start + $length && $i < $str_length; $i++) {
$result .= mb_substr($string, $i, 1, $encoding);
}
return $result;
}
使用示例
$str = "Hello, 世界!";
echo custom_substr($str, 0, 5); // 输出 "Hello"
echo mb_custom_substr($str, 7, 2); // 输出 "世界"
注意事项
- 原生PHP字符串函数对多字节字符支持有限,处理中文等字符时可能出现乱码
- 多字节版本性能较低,实际项目中建议直接使用
mb_substr - 负数参数表示从字符串末尾开始计算位置
- 长度参数为负数时表示从起始位置到字符串末尾减去该长度的位置







