【问题标题】:preg_match and special characters in keyword not workingpreg_match 和关键字中的特殊字符不起作用
【发布时间】:2011-12-07 00:56:15
【问题描述】:

我有这个:

if (preg_match("/\b".preg_quote($kw_to_search_for)."\b/i", $search_strings[$i])) {
    // found
}

到目前为止这有效,但如果我在变量 $kw_to_search_for 中有特殊字符,那么这将失败。

例如
$kw_to_search_for = '你好' 工作。
$kw_to_search_for = 'Hallå' 失败。

我该如何解决这个问题,是什么原因造成的?

谢谢

【问题讨论】:

    标签: php html regex


    【解决方案1】:

    尝试使用 u 修饰符来启用 UTF8 支持:

    u (PCRE8)
    此修饰符打开与 Perl 不兼容的 PCRE 的附加功能。模式字符串被视为 UTF-8。此修饰符在 Unix 上的 PHP 4.1.0 或更高版本以及 win32 上的 PHP 4.2.3 中可用。自 PHP 4.3.5 起检查模式的 UTF-8 有效性。

    http://ch.php.net/manual/en/reference.pcre.pattern.modifiers.php

    【讨论】:

      【解决方案2】:

      我怀疑您的问题与多字节字符和编码有关。

      发件人:multi-byte function to replace preg_match_all?

      你看过 mb_ereg 吗?

      此外,您可以将 UTF-8 编码的字符串传递给 preg_match 使用 u 修饰符,这可能是一种多字节支持你 需要。另一种选择是编码成 UTF-8,然后编码 结果回来了。

      在这种情况下,将像这样添加 u 修饰符

      if (preg_match("/\b".preg_quote($kw_to_search_for)."\b/iu", $search_strings[$i])) {
          // found
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多