0

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

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

我试图找到一个关于范围如何在这里工作以及如何从没有运气的范围中挑选出一个字母的清晰解释。我怎么做?

谢谢

4

2 回答 2

0

您所指的字符是修饰符字母转逗号 (U+02BB),在 Unicode 标准中被描述为“在夏威夷正字法中用作 ʻokina(声门塞音)”。有人可能会说它是最正确的 `okina,但它肯定不是唯一用于此目的的字符。'okina 经常写成右单引号' U+2019、左单引号' U+2018、(Ascii)撇号' U+0027 或重音符号' U+0060。

但考虑到 U+02BB,它可以用 PHP 正则表达式编写为\x{02bb}. 有关该符号的说明,请参阅如何在 PHP 中用 '*' 替换不在 [0x5E10, 0x7F35] 范围内的字符?

于 2012-11-15T22:35:38.003 回答
0

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

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

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

如果是这样,则可能是您与 okina 混淆的“左单引号”(西方字符集中的 x91)。

于 2012-11-15T21:53:05.783 回答