如何找出UTF 8中的标点符号形式?

时间:2011-10-05 13:15:50

标签: php string unicode character-properties

我有一组像

这样的字符

.!?;(空格)

和一个字符串,可能是也可能不是UTF 8(任何语言)。

有没有一种简单的方法可以确定字符串是否包含上面的字符集之一?

例如:

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

转换为

This is a string in chinese.

点字符在第一个字符串中看起来不同。这是一个完全不同的角色,还是utf 8中的点代码?

或许有一个带有Unicode标点字符代码的列表?

3 个答案:

答案 0 :(得分:4)

在Unicode中有character propertiesPHP Docs,例如符号,字母等。您可以使用preg_matchDocsu修饰符搜索特定类的任何字符串。

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

但是,您的字符串需要UTF-8才能执行此操作。

您可以自行测试,我创建a little script,通过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).

相关:PHP - Fast way to strip all characters not displayable in browser from utf8 string

答案 1 :(得分:4)

是的,(U + 3002, IDEOGRAPHIC FULL STOP )与.完全不同(U + 002E, FULL STOP )。如果要查明字符串是否包含列出的字符之一,可以使用正则表达式:

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

这将返回01$match将包含匹配的字符。这样,$str中的字符串在UTF-8中正确编码非常重要。

如果要匹配任何Unicode标点字符,可以使用模式\p{P}来描述Unicode character property

/\p{P}/u

答案 2 :(得分:3)

你没有尝试音译,你正试图翻译!

UTF-8不是一种语言,是一种支持(虚拟)世界上已知语言的unicode字符集

你要做的是这样的事情:

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

不适用于您的中文示例