我有以下代码可以在我的离线测试版本上正常工作,但在在线服务器上失败。
$names = "dimitris giannIs micHalis";
echo preg_replace("/s\b/", "w", mb_convert_case($names, MB_CASE_TITLE, "UTF-8"));
我得到的结果是Dimitriw Gianniw Michaliw
。
但是我有UTF-8而不是英文字符/单词。如果我将上面的示例按原样放置(英语),则可以正常工作,所以我猜我在用UTF-8做错了什么
答案 0 :(得分:1)
通常(但请参见编辑下面的注释),您需要在正则表达式上使用u
修饰符以使其能够使用UTF-8字符。例如
$words = "qθαεqθε γραεcισ cονσεcτε";
echo preg_replace("/ε\b/u", "α", mb_convert_case($words, MB_CASE_TITLE, "UTF-8"));
输出:
Qθαεqθα Γραεcισ Cονσεcτα
此example在rextester上演示了u
修饰符的用法(请注意,rextester不支持mb_convert_case
,但实际上并不影响结果)。
修改
如@CasimiretHippolyte所指出的,默认情况下,可以使用--enable-unicode-properties
选项编译PCRE扩展名(由PHP用于正则表达式)以处理Unicode字符。这可以解释离线测试版本和在线服务器上的结果之间的差异。