将多字节字符串中的符号与ASCII中的符号进行比较

时间:2012-09-09 00:54:27

标签: php string encoding

我想检测多字节字符串中的空格或连字符 首先,我将一个字符串拆分为字符数组

$chrArray = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);

然后我尝试用连字符或空格比较这些符号

foreach ($chrArray as $char) {
    if ($char == '-' || $char == ' ') {
        // Do something
    }
}

哦,这个不起作用。好的,为什么?也许是因为ASCII中的那些符号?

echo mb_detect_encoding('-'); // ASCII

好的,我会尝试处理它。

    $encoding = mb_detect_encoding($str); // UTF-8
    $dash = mb_convert_encoding('-', $encoding);
    $space = mb_convert_encoding(' ', $encoding);

哦,但它也不起作用。等一下......

echo mb_detect_encoding($dash); // ASCII

!!!发生了什么???我怎么能做我想做的事?

1 个答案:

答案 0 :(得分:0)

我来使用正则表达式。这一个

"/(?<=-| |^)([\w]*)/u"

查找unicode中所有具有连字符或空格的单词,或者在前一个位置没有任何内容(在第一行中)。我没有迭代字符数组而是使用preg_replace_callback(在PHP&gt; = 5.4.1中可以使用mb_ereg_replace_callback)。