【问题标题】:How do I allow the 'okina character through a range in preg_replace()?如何允许 'okina 字符通过 preg_replace() 中的范围?
【发布时间】:2012-11-04 14:22:35
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: php preg-replace special-characters


    【解决方案1】:

    您所指的字符是修饰符字母转逗号 (U+02BB),在 Unicode 标准中被描述为“在夏威夷正字法中用作 ʻokina(声门塞音)”。有人可能会说它是最正确的 `okina,但它肯定不是唯一用于此目的的字符。 '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?

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 这仍然是替换它。我的问题可能不清楚。我不想更换'okina。我希望它保留在字符串中。
      • @awolfey 试试我的编辑,看看它是否能让你的角色通过。
      猜你喜欢
      • 1970-01-01
      • 2016-12-16
      • 2011-12-03
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      相关资源
      最近更新 更多