php如何实现智能截串问题?
如题如何实现智能截串,要求如下:
1 标准截串长度为 360 ,汉字,字母,符号 等视为 1 字节处理,实际截出来的串可以跟据一下条件自动调整。
2 如果在第360位是汉字,或字母 则 按语义截取(只考虑词组),例:中国 (“中”字为第360位)要求截出的结果为361位,单词也一样 hello (中e为第360为 但是截取时要求截取完整的单词)
3 由于内容中有图片,图片的形式为<img src='www.xxx.com/xxx/xxx.jpg' title='图片描述'/> ,提及,提及的形式为:<a href='http://www.xxx.com'>@提及</a>,还有外链,形式同提及。 如何截取整段html代码,不要截成:<a href='http:// (因为截取到//时正好360位)这样会原样输出,也会导致页面样式乱掉
现在优先考虑 1 和 3 点。。。
请教下大家有什么简单的办法么?思路也行。。
也可以考虑每个单词或汉字词语 视为 1 位 处理
寂寞无聊蛋疼帝
12 years, 8 months ago
Answers
可以考虑每个汉字当做一个字符处理。网上有很多中文字符串截断的方案,我基本上都看过,都会有这样那样的问题,不是很完美。
这里推荐一个UTF-8字符串截断的方案,是久经考验值得信赖的。欢迎试用。
截断字符串实现代码如下(php):
function subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[ ] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[ ] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[ ] = substr($str, $i, 3);
$i += 2;
}else{
$r[ ] = '';
}
if (++$m >= $lenth){
break;
}
}
}
return join($r);
} // End subString_UTF8;
参考:http://www.cnblogs.com/jiji262/archive/2012/07/03/2574441.html
iceblue
answered 12 years, 8 months ago