簡體   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