Skip to content

Instantly share code, notes, and snippets.

@cloudsben
Created November 7, 2012 02:32
Show Gist options
  • Save cloudsben/4029265 to your computer and use it in GitHub Desktop.
Save cloudsben/4029265 to your computer and use it in GitHub Desktop.
截取字符串到指定位置,html不包含在内
/**
* 函数名 html_substr
* 功能 从html串中截取指定长度的字串,html标记不计算在内
* 参数
* $str 要截取的串
* $len 要截取的长度
* $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐
* 返回 截取到的串
* 说明
* 未考虑多字节字符,仅已字节做计数单位
* 未考虑可单独存在的标记
**/
function html_substr($str, $len, $mode=0) {
$ar= preg_split('/(<\!--.*-->|<[^>]*>)/s', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach($ar AS $k => $v) {
if($v{0} != '<') {
$len = $len - strlen($v);
if($len < 0) $ar[$k] = substr($v, 0, $len);
}else $ar[$k] = strtolower($v);
if($len <= 0) break;
}
$ar = array_slice($ar, 0, $k+1);
$len = count($ar);
foreach($ar as $k=>$v) {
if($v{0} == '<' && $v[1] != '/') {
$ch = str_replace('<', '</', $v);
for($i=$k+1; $i<$len && $ar[$i]!=$ch; $i++);
if($i == $len)
if($mode)
$ar[$len] = $ch . $ar[$len];
else
$ar[$k] = '';
}
}
return join('', $ar);
}
$str = "123<em>abc</em>456<em>def</em>789";
echo '<xmp>';
echo html_substr($str, 5) . PHP_EOL;
echo html_substr($str, 5, 1);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment