代码之家  ›  专栏  ›  技术社区  ›  Samy

使用strpos进行PHP阿拉伯语文本比较

  •  2
  • Samy  · 技术社区  · 12 年前

    我在mysql表中有一个阿拉伯语关键字,如

        *#1591; *#1610; *#1585;*#1575;*#1606
    

    //请考虑&在*的位置,值为'&'自动转换成阿拉伯语。

    Mysql表编码:utf8_general_ci

    我从外部资源示例twitter中得到了一些字符串。

    我想将这个关键词与我收到的推文相匹配。

     $tweet = 'وينج وأداسي الاماراتية توقعان اتفاقية تعاون لتوفير أنظمة الطائرات بدون طيا';
    
      $keyword = '*#1591; *#1610; *#1585;*#1575;*#1606'; //From db
    
      $status = strpos ($tweet, $keyword)
    

    $status总是返回false。

    我已经检查了utf8_encode()、utf_8_decode()、mb_strpos(),但没有任何运气。

    我知道在比较之前需要将两个字符串转换为一种通用格式,但我需要转换哪种格式?

    请帮我做这件事。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Diego Agulló    12 年前

    由于阿拉伯符号是使用多字节字符编码的,因此必须使用支持此类约束的函数: grapheme_strpos mb_strpos (按该顺序)。

    使用它们而不是普通的老式strpos就可以了。

    此外,请记住,您可能必须在使用前检查其可用性,因为并非所有托管环境都启用了这些功能:

    if (function_exists('grapheme_strpos')) {
        $pos = grapheme_strpos($tweet, $keyword);
    } elseif (function_exists('mb_strpos')) {
        $pos = mb_strpos($tweet, $keyword);
    } else {
        $pos = strpos($tweet, $keyword);
    }
    

    最后但同样重要的是,检查文档中函数采用的不同参数,作为字符串使用的编码。