繁体   English   中英

PHP函数中的编码问题

[英]Problems with encoding in PHP functions

我正在尝试使用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修饰符,但是我很难写正则表达式。

安妮的帮助将不胜感激。

不确定我是否理解您的请求,但是我尝试了您的脚本,该脚本运行正常,只是您需要添加return $urlStr; 在函数的末尾。
并且必须将其重命名为createUrl

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

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

干杯! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM