函数巧妙地运用了正则表达式, 用起来很方便, 就像 substr 的用法一样, 可以正向截取也可反相截取, 思路值得学习.
-
-
function c_substr($string, $from, $length = null){
-
('/[x80-xff]?./', $string, $match);
-
if(($length)){
-
$result = ('', ($match[0], $from));
-
}else{
-
$result = ('', ($match[0], $from, $length));
-
}
-
return $result;
-
}
-
$str = "zhon华人min共和guo";
-
$from = 3;
-
$length = 7;
-
(c_substr($str, $from, $length));
-
// 输出: n华人min共
-
//还有utf-8的
-
/*
-
Regarding windix's function to handle UTF-8 strings:
-
one can use the "u" modifier on the regular expression so that the pattern string is treated as UTF-8
-
(available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32).
-
This way the function works for other encodings too (like Greek for example).
-
The modified function would read like this:
-
*/
-
function utf8_substr($str,$start) {
-
$null = "";
-
("/./u", $str, $ar);
-
if(() >= 3) {
-
$end = (2);
-
return ($null, ($ar[0],$start,$end));
-
} else {
-
return ($null, ($ar[0],$start));
-
}
-
}
-
?>
之二:
-
-
-
/***************************************************/
-
/* */
-
/* Author: */
-
/* HomePage: */
-
/* Email: phforum@163.com */
-
/* QQ:1984412 */
-
/* */
-
/***************************************************/
-
-
function get_substr($string,$start='0',$length='')
-
{
-
$start = (int)$start;
-
$length = (int)$length;
-
$i = 0;
-
if(!$string)
-
{
-
return;
-
}
-
if($start>=0)
-
{
-
while($i<$start)
-
{
-
if(($string[$i])>127)
-
{
-
$i = $i+2;
-
}
-
else
-
{
-
$i++;
-
}
-
}
-
$start = $i;
-
if($length=='')
-
{
-
return ($string,$start);
-
}
-
elseif($length>0)
-
{
-
$end = $start+$length;
-
while($i<$end)
-
{
-
if(($string[$i])>127)
-
{
-
$i = $i+2;
-
}
-
else
-
{
-
$i++;
-
}
-
}
-
if($end != $i-1)
-
{
-
$end = $i;
-
}
-
else
-
{
-
$end--;
-
}
-
$length = $end-$start;
-
return ($string,$start,$length);
-
}
-
elseif($length==0)
-
{
-
return;
-
}
-
else
-
{
-
$length = ($string)-($length)-$start;
-
return get_substr($string,$start,$length);
-
}
-
}
-
else
-
{
-
$start = ($string)-($start);
-
return get_substr($string,$start,$length);
-
}
-
}
-
-
?>
阅读(1291) | 评论(3) | 转发(0) |