我在使用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版本? –