[英]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.