如何通过preg_replace()中的范围允许'okina字符?

时间:2012-11-15 21:45:03

标签: php preg-replace special-characters

我需要通过以下代码允许'okina字符

<?php $char = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\xFF]/u', '', $char); ?>

我试图找到一个明确的解释,说明范围如何在这里工作,以及如何从一个没有运气的范围中挑出一个字母。我该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

由于你的正则表达式只阻塞长度为一个字节或更短的“某些”字符,因此它不可能阻塞okina字符,因为它是一个双字节字符。所以,我建议你试试这个正则表达式:

<?php $char = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/u', '', $char); ?>

并允许所有字符x80-xFF通过,看看是否能解决您的问题。

如果确实如此,可能是“左侧单引号”(西方字符集中的x91),你会对okina感到困惑。

答案 1 :(得分:0)

您所指的字符是MODIFIER LETTER TURNED COMMA(U + 02BB),在Unicode标准中描述为“在夏威夷正字法中用作'kina(声门停止)”。可能有人认为它是最正确的'',但肯定不是唯一用于此目的的角色。很常见'okina'是用右单引号'U + 2019,左单引号'U + 2018,(Ascii)撇号'U + 0027,或重音'U + 0060。

但考虑到U + 02BB,它可以用PHP正则表达式\x{02bb}编写。有关表示法的说明,请参阅How do I replace characters not in range [0x5E10, 0x7F35] with '*' in PHP?