2016-03-02 54 views
1

目前正在使用PHP簡單的HTML DOM分析器,並遇到一個非常奇怪的場景。PHP簡單的HTML DOM分析器刪除字符/ str_replace

我有一組我正在爬行,並使用以下命令獲取信息,我需要的URL:

foreach($urls as $url) { 
    $html = file_get_html($url); 
    foreach($html->find('.product4block') as $article) { 
    $item['title']  = $article->find('.product4text', 0)->plaintext; 
    $item['link'] = $article->find('.product4text a', 0)->href; 
    $item['price'] = $article->find('.product_price', 0)->plaintext; 
    $data[] = $item; 
    } 
} 

然後我得到像下面這樣,結果這正是我需要的:

Array 
(
    [0] => Array 
     (
      [title] => title 0 
      [link] => link 0 
      [price] => £26.99 
     ) 

    [1] => Array 
     (
      [title] => title 1 
      [link] => link 1 
      [price] => £27.99 
     ) 

    [2] => Array 
     (
      [title] => title 2 
      [link] => link 2 
      [price] => £30.99 
     ) 
) 

然後我通過數據循環將其添加到我的數據庫。

foreach($data as $result){ 
    //insert data here// 
} 

然後我需要從價格中刪除£符號。對此我只是做了str_replace函數是這樣的:

$price = str_replace('£', '', $result['price']); 

出於某種奇怪的原因£是沒有得到清除。我不知道,如果它的DOM解析器導致問題,或者如果str_replace只是因爲某種原因不工作。

任何原因,這將無法正常工作?

+0

奇,做了一個快速檢查和你的'str_replace'似乎是爲我工作,只是作爲一種檢查你能嘗試更改'str_replace'以刪除價格字符串中的另一個字符。如果刪除它,那麼問題是這兩個'''字符出於某種原因是不一樣的,無論這是由於某種形式的字符編碼,我不是100%確定。 – Mikey

回答

0
foreach($urls as $url) { 
    $html = file_get_html($url); 
    foreach($html->find('.product4block') as $article) { 
    $item['title']  = $article->find('.product4text', 0)->plaintext; 
    $item['link'] = $article->find('.product4text a', 0)->href; 
    $item['price'] = $article->find('.product_price', 0)->plaintext; 
    $data[] = $item; 
    } 
} 

與此代替它會工作

foreach($urls as $url) { 
    $html = file_get_html($url); 
    foreach($html->find('.product4block') as $article) { 
    $item['title']  = $article->find('.product4text', 0)->plaintext; 
    $item['link'] = $article->find('.product4text a', 0)->href; 
    $item['price'] = trim(str_replace('£', '',$article->find('.product_price', 0)->plaintext)); 
    $data[] = $item; 
    } 
} 

再次無需循環。

0

有很多方法。 首先,您可以閱讀Multibyte String Functions

之後,您可以使用帶有UTF-8選項的preg_replace函數。

最後,您還可以使用該字符的ASCII碼。

第一個例子:

$tab['price'] = '£26.99'; 
$tab['price'] = preg_replace('#£#u', '', $tab['price']); 

結果:

Array 
(
    [price] => 26.99 
) 

注意正則表達式 「U」 之後。

示例2:

echo ord('£'); // show 194 
$price=str_replace(chr(194),'',$price); 
echo $price; // show 26.99 
相關問題