Как я могу узнать, как форма знака препинания в UTF 8? - PullRequest
3 голосов
/ 05 октября 2011

У меня есть набор символов, таких как

., !, ?, ;, (пробел)

и строка, которая может быть или не быть UTF 8 (любой язык).

Есть ли простой способ узнать, есть ли в строке один из указанных выше символов?

Например:

这是一个在中国的字符串。

, что переводится как

This is a string in chinese.

Символ точки выглядит по-разному в первой строке. Это совершенно другой символ или точечный корреспондент в UTF 8?

Или, может быть, где-то есть список с символами пунктуации Unicode?

Ответы [ 3 ]

4 голосов
/ 05 октября 2011

Да, (U + 3002, IDEOGRAPHIC FULL STOP ) - это совершенно другой символ, чем . (U + 002E, FULL STOP ).Если вы хотите выяснить, содержит ли строка один из перечисленных символов, вы можете использовать регулярные выражения:

preg_match('/[.!?;。]/u', $str, $match)

Это вернет либо 0, либо 1, а $match будет содержать совпаденияперсонаж.При этом важно, чтобы ваша строка в $str была правильно закодирована в UTF-8.

Если вы хотите сопоставить любой символ пунктуации Unicode, вы можете использовать шаблон \p{P} для описания Unicode свойство символа вместо:

/\p{P}/u
4 голосов
/ 05 октября 2011

В Юникоде есть свойства символов Документы PHP , например, Символы, Буквы и тому подобное.Вы можете искать любую строку определенного класса с помощью preg_match Документов и модификатора u.

echo preg_match('/pP$/u', $str);

Однаковаша строка должна быть UTF-8 для этого.

Вы можете проверить это самостоятельно, я создал небольшой скрипт , который проверяет все свойства с помощью preg_match:

Looking for properties of last character in "Test.":
Found Punctuation (P).
Found Other punctuation (Po).

Looking for properties of last character in "这是一个在中国的字符串。":
Found Punctuation (P).
Found Other punctuation (Po).

Related: PHP - Быстрый способ убрать все символы, не отображаемые в браузере, из строки utf8 .

3 голосов
/ 05 октября 2011

вы не пытаетесь транслитерировать, вы пытаетесь перевести!

UTF-8 не является языком, это набор символов Unicode, который поддерживает (практически) все языки, известные в мире

вы пытаетесь сделать что-то вроде этого:

echo iconv("UTF-8", "ASCII//TRANSLIT//IGNORE",  "这是一个在中国的字符串。");
echo iconv("UTF-8", "ASCII//TRANSLIT//IGNORE",  "à è ò ù");

, который не работает с вашим китайским примером

...