我在使用fopen()接收API數據時,在解析php中的csv文件時出現問題。使用fopen()編碼問題解析PHP
我的代碼在我使用在瀏覽器中顯示csv文件的URL時起作用,如1)下面所述。但是我得到一個從格式= csv結尾的URL輸出的隨機字符,如2)所示。
1)工作網址:返回期望的值 https://www.kimonolabs.com/api/csv/duo2mkw2?apikey=yjEl780lSQ8IcVHkItiHzzUZxd1wqSJv
2)不工作的網址:返回隨機字符 https://www.parsehub.com/api/v2/projects/tM9MwgKrh0c4b81WDT_4FkaC/last_ready_run/data?api_key=tD3djFMGmyWmDUdcgmBVFCd3&format=csv
這裏是我的代碼: - 使用URL(2)上述
<?php
$f_pointer=fopen("https://www.parsehub.com/api/v2/projects/tM9MwgKrh0c4b81WDT_4FkaC/ last_ready_run/data?api_key=tD3djFMGmyWmDUdcgmBVFCd3&format=csv","r");
while(! feof($f_pointer)){
$ar=fgetcsv($f_pointer);
echo $ar[1];
echo "<br>";
}
?>
輸出:對於提到URL (2)以上:
根@ MorryServer:/#PHP testing.php
?IU?Q?JL?。?/ Q?R ?? /??J-。?)?V????????????????????????????????? ?? @ D ?? K
正確的輸出:如果我使用URL類型如(1)
根@ MorryServer指出:/#PHP testing.php
PHP通知:未定義偏移:1 /上線24 testing.php
頭獎
€
先用什麼樣子的URL返回數據像一個標題作爲第一個價值。這是無效的CSV(或至少非常規),所以PHP的CSV功能將有一個問題。第二個網址似乎會返回有效的CSV值。而不是使用'fopen'(你不應該使用它;它是一個低級函數,只有在你必須使用它的時候才能使用),你應該使用像'str_getcsv'這樣的東西,這個。 –
嗨Sverri,第一個網址是好的,我可以刪除標題,問題是2)奇怪的輸出。我需要代碼爲parsehub url工作 –
如果你運行這個命令,你會得到什麼:'php -r「echo mb_internal_encoding();」'第二個URL看起來非常好。它返回一個mimetype爲'text/csv',用'UTF-8'編碼的文件。略微老版本的PHP默認使用'iso-8859-1'。較新的版本使用'utf-8'。什麼是你的PHP版本? –