PHP的preg_replace使用UTF-8不工作(PHP preg_replace with U

2019-10-17 20:47发布

为什么不工作这的preg_replace?

仅供参考,我有PHP脚本设置为UTF-8无BOM和我这里的功能设置为删除模式(而不是什么我会怎么做,这是删除所有非匹配),因为这是测试更容易的所有比赛。 还要注意的是, 性格是不是在我的正则表达式,所以这应该是唯一的字符留下。

$string='The Story of Jewād';
echo preg_replace('@([!"#$&’\(\)\*\+,\-\./0123456789:;<=>\?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_‘abcdefghijklmnopqrstuvwxyz\{\|\}~¡¢£⁄¥ƒ§¤“«‹›fifl–†‡·¶•‚„”»…‰¿`´ˆ˜¯˘˙¨˚¸˝˛ˇ—ƪŁØŒºæıłøœß÷¾¼¹×®Þ¦Ð½−çð±Çþ©¬²³™°µ ÁÂÄÀÅÃÉÊËÈÍÎÏÌÑÓÔÖÒÕŠÚÛÜÙÝŸŽáâäàåãéêëèíîïìñóôöòõšúûüùýÿž€\'])@u','',$string);

结果我得到的是$字符串不变。 为什么会这样?

Answer 1:

这可以作为反向:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<?php 

$string='The Story of Jewād';
echo preg_replace('@([ā])@','',$string);

?>

因此,存在的仅仅是语法问题的地方......这不是一个好主意,列出所有的字符作为一个RegExp。 你可以做的房源是这样的:

ltrChars : 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF';
rtlChars : '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC';


文章来源: PHP preg_replace with UTF-8 not working