0

php中是否有一个标准函数可以返回一个多字节符号第一次出现的位置?

总体任务如下。我在这个字符串中有多字节字符串和位置,我需要找到其中一个符号(分隔符)的第一次出现。我编写了以下函数,但不幸的是它的运行速度很慢。

$delimiters = array( 
    "\r", "\n", "\t", ".", ";", "!", "?"
);

function get_cit_end($str, $end) {
    global $delimiters;
    if( $end >= mb_strlen($str) )
        return mb_strlen($str) - 1;
    $c = mb_substr($str, $end, 1);
    while( $end < mb_strlen($str) ) {
        if( in_array($c, $delimiters) )
            break;
        $end++;
        $c = mb_substr($str, $end, 1);
    }
    return $end;
}
4

2 回答 2

2

我会使用mb_strpos(),像这样:

function get_cit_end($str, $delimeters) {
    $index = -1;
    foreach( $delimiters as $d) {
        if( ($i = mb_strpos( $str, $d)) !== false) {
            $index = $i;
            break;
        }
    }
    if( $index == -1) return mb_strlen( $str) - 1;
    return $index;
}
于 2012-10-23T13:01:42.413 回答
0

如果启用mbstring函数重载,则可以使用strpos()带有多字节字符串的普通函数:

以下 mbstring-variables 应通过 php.ini 或 vhost-configuration 设置;它们不会按目录工作(即通过.htaccess)。

  • mbstring.language = 中性
  • mbstring.internal_encoding = UTF-8
  • mbstring.func_overload = 7

另见: http: //php.net/mbstring

于 2012-10-23T13:07:08.113 回答