Как разбить китайские иероглифы в PHP? - PullRequest
2 голосов
/ 06 ноября 2010

Мне нужна помощь относительно того, как разбивать китайские иероглифы, смешанные с английскими словами и цифрами в PHP.

Например, если я читаю

FrontPage 2000中文版應用大全

Я надеюсь получить

FrontPage, 2000, 中,文,版,應,用,大,全

или

FrontPage, 2,0,0,0, 中,文,版,應,用,大,全

Как мне этого добиться?

Заранее спасибо:)

Ответы [ 3 ]

10 голосов
/ 06 ноября 2010

Предполагается, что вы используете UTF-8 (или вы можете конвертировать его в UTF-8 с помощью Iconv или некоторых других инструментов), затем с помощью модификатора u (doc: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php)

<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/./u', $s, $matches));
echo "\n";
print_r($matches);
?>

даст

21
Array
(
    [0] => Array
        (
            [0] => F
            [1] => r
            [2] => o
            [3] => n
            [4] => t
            [5] => P
            [6] => a
            [7] => g
            [8] => e
            [9] =>  
            [10] => 2
            [11] => 0
            [12] => 0
            [13] => 0
            [14] => 中
            [15] => 文
            [16] => 版
            [17] => 應
            [18] => 用
            [19] => 大
            [20] => 全
        )

)

Обратите внимание, что мой исходный код хранится в файле, также закодированном в UTF-8, для $ s, содержащего эти символы.

Следующее будетсопоставить алфавитно-цифровую группу:

<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/(\w+)|(.)/u', $s, $matches));
echo "\n";
print_r($matches[0]);
?>

результат:

10
Array
(
    [0] => FrontPage
    [1] =>  
    [2] => 2000
    [3] => 中
    [4] => 文
    [5] => 版
    [6] => 應
    [7] => 用
    [8] => 大
    [9] => 全
)
1 голос
/ 10 мая 2017
    /**
     * Reference: http://www.regular-expressions.info/unicode.html
     * Korean: Hangul
     * CJK: Han
     * Japanese: Hiragana, Katakana
     * Flag u required
     */

    preg_match_all(
        '/\p{Hangul}|\p{Hiragana}|\p{Han}|\p{Katakana}|(\p{Latin}+)|(\p{Cyrillic}+)/u',
        $str,
        $result
    );

Это тот, который мне подходит, если вы используете PHP 7.0 тоже.

Этот просто не работает. Сожалею, что проголосовал за неработающее решение ....

<?
$s = "FrontPage 2000中文版應用大全";
print_r(preg_match_all('/(\w+)|(.)/u', $s, $matches));
echo "\n";
print_r($matches[0]);
?>
1 голос
/ 29 февраля 2012

С помощью этого кода вы можете сделать китайский текст (utf8) для переноса в конце строки, чтобы он оставался читаемым

print_r(preg_match_all('/([\w]+)|(.)/u', $str, $matches));
$arr_result = array();

foreach ($matches[0] as $key => $val) {
    $arr_result[]=$val;
    $arr_result[]="&#8203;"; //add Zero-Width Space
} 
foreach ($arr_result as $key => $val) {
    $out .= $val;
} 
return $out;
...