我想从一个字符串建立一个网址,那我得到的WebCrawler。我设法创建了一个爬虫程序,但是我无法创建一个URL字符串......我已经设法发现PHP函数preg_match_all弄乱了我的结果。这是我有:在PHP的编码问题的功能
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修饰符,但我在写正则表达式时遇到困难。
安妮帮助将apreciated。
哪里是你的分隔符为你使preg_split电话吗? – echochamber
尝试添加'u'到preg_match_all正则表达式像'/“([^”] +)“/ u' –
你的输入是什么样的? – hwnd