我有一個奇怪的PHP問題。PHP preg_replace瀏覽器和控制檯不同的行爲
我使用此代碼讀取HTML頁面
$fh = fopen('html_page.htm', 'r+');
$html_page = '';
while (!feof($fh))
{
$html_page .= fread($fh, 1024);
}
fclose($fh);
而且在該網頁中我有這樣的事情:
<span> </span>
而且這樣的:
<span> 324.85 SGD </span>
所以我想從所有的內容中去掉那些標籤的內容,使第一個例子變成空字符串和第二例這樣的:
324.85 SGD
我的解決辦法是這樣的:($ str變量保存標籤的內容,只是內容沒有標籤)
$str = trim(preg_replace('/[^\w+ .,:;]/', ' ', $str));
當我通過瀏覽器加載我的腳本時,這很有效。 即使我得到這樣的:
324.85 SGD // Inner extra spaces not removed
注:我的劇本被加載,而不是HTML頁面,它仍然是讀取槽FREAD()調用。
我在瀏覽器中顯示輸出(是的,我在看HTML源代碼),它的表現很好。 但是,當我運行腳本槽控制檯,它仍然以同樣的方式讀取相同的HTML頁面,基本上所有的都一樣,除了我保存輸出到.txt文件或顯示它在控制檯我得到這個。
第一個例子與所有的& nbsp;
    Â
而第二與& NBSP混合值;
  324.85 SGDÂ
當我運行低谷的瀏覽器,因爲在節目中,我檢查空字符串值(第一個例子),它確實是空的第一個例子,這是不喜歡這些人物在那裏,但不顯示。
解決方案,我發現是這樣的:
$str = trim(preg_replace('/[\x00-\x1F\x80-\xFF]/', ' ', $str));
作品在這兩種情況下。 輸出: 324.85 SGD
所以問題是,爲什麼PHP在這種情況下通過瀏覽器和控制檯運行時表現如此不同?
什麼是標準化字符串以消除多餘的內部空間的最佳方式是什麼?
從這:
324.85 SGD
這個
324.85 SGD
但是,當然,我想它的所有字符串的工作,無論他們是多麼漫長。
謝謝。
我認爲可能就是這樣。當我在網頁上打印時,我使用echo,當然在文件fwrite()中。所以它可能是fread()和HTML的字符編碼。謝謝。 – 2014-10-28 05:17:36