php函数找到其中一个多字节字符的位置

时间:2012-10-23 12:55:52

标签: php multibyte

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;
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

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

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

另请参阅:http://php.net/mbstring