我有一组像
这样的字符 .
,!
,?
,;
,(空格)
和一个字符串,可能是也可能不是UTF 8(任何语言)。
有没有一种简单的方法可以确定字符串是否包含上面的字符集之一?
例如:
这是一个在中国的字符串。
转换为
This is a string in chinese.
点字符在第一个字符串中看起来不同。这是一个完全不同的角色,还是utf 8中的点代码?
或许有一个带有Unicode标点字符代码的列表?
答案 0 :(得分:4)
在Unicode中有character propertiesPHP Docs,例如符号,字母等。您可以使用preg_match
Docs和u
修饰符搜索特定类的任何字符串。
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)
这将返回0
或1
,$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", "à è ò ù");
不适用于您的中文示例