我正在尝试使用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帮助会被贬低。
答案 0 :(得分:0)
我不确定我是否理解您的请求,但我尝试了您的脚本并且工作正常,但您需要在功能结束时添加return $urlStr;
。
它必须重命名为createUrl
。
答案 1 :(得分:0)
我终于找到了解决方案。如果有人会遇到这个问题,这应该会有所帮助。正如我所想,编码存在问题。我刚刚在解决问题的preg_match_all之前添加了一行代码:
$matches = mb_convert_encoding($str, 'UTF-8', 'ISO-8859-13');
干杯! :)