PHP函数中的编码问题

时间:2013-12-10 23:45:38

标签: php regex preg-match

我正在尝试使用webcrawler从字符串构建一个URL。我已经设法创建了一个爬虫,但是我无法创建一个URL字符串...我已经设法找出PHP函数preg_match_all弄乱了我的结果。这就是我所拥有的:

preg_match_all('/"([^"]+)"/', $str, $matches); 
foreach ($matches[1] as $value) {
     $termsArray[] = $this->createUrl($value);
}

preg_match_all函数返回正确的字符串,但我想,编码是错误的...而createUrl函数看起来很简单:

private function createLikitUrl($term)
    {
    $ltSymbolsArray = array(
              'a1' => 'ą',
              'c2' => 'č',
              'e1' => 'ę',
              'e2' => 'ė',
              'i1' => 'į',
              's2' => 'š',
              'u1' => 'ų',
              'u2' => 'ū',
              'z2' => 'ž',
              '_' => ' '
          );
          $chars = preg_split("//u", $term, -1, PREG_SPLIT_NO_EMPTY);
          $urlStr = '';
          foreach ($chars as $value) {
            foreach ($ltSymbolsArray as $key => $replacement) {
              if ($value == $replacement) {
                $value = $key;
              }
            }
            $urlStr .= $value;
          }
}

问题是当preg_match_all与具有多字节符号的字符串一起使用时,preg_split返回与$ term变量相同的字符串。如果我在不使用preg_match_all的情况下将字符串传递给createUrl函数,那么它可以完美地工作。我的猜测是我在preg_match_all模式中缺少unicode修饰符,但我很难写正则表达式。

Anny帮助会被贬低。

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的请求,但我尝试了您的脚本并且工作正常,但您需要在功能结束时添加return $urlStr;。 它必须重命名为createUrl

答案 1 :(得分:0)

我终于找到了解决方案。如果有人会遇到这个问题,这应该会有所帮助。正如我所想,编码存在问题。我刚刚在解决问题的preg_match_all之前添加了一行代码:

$matches = mb_convert_encoding($str, 'UTF-8', 'ISO-8859-13');

干杯! :)