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