问题描述
|
我从google电子表格RSS Feed中生成了以下数据。
いきます,go,5
きます,come,5
かえります,\"go home,return\",5
がっこう,school,5
スーパー,supermarket,5
えき,station,5
ひこうき,airplane,5
使用PHP,我可以执行以下操作:
$url = \'http://google.com.....etc/etc\';
$data = file_get_contents($url);
echo $data; // This prints all Japanese symbols
但是,如果我使用:
$url = \'http://google.com.....etc/etc\';
$handle = fopen($url);
while($row = fgetcsv($handle)) {
print_r($row); // Outputs [0]=>,[1]=>\'go\',[2]=>\'5\',etc,i.e. the Japanese characters are skipped
}
因此,当使用fopen
或fgetcsv
时,似乎跳过了日语字符。
我的文件另存为UTF-8,它的PHP标头将其设置为UTF-8,HTML头中有一个Meta标记将其标记为UTF-8。我认为这不是文档本身,因为它可以通过file_get_contents
方法显示字符。
谢谢
解决方法
我无法在Darien的答案中添加评论
我重现该问题,更改语言环境后,问题已解决。
您必须在服务器上安装jp语言环境,然后再尝试重复此操作。
的Ubuntu
在文件/var/lib/locales/supported.d/local中添加新行
ja_JP.UTF-8 UTF-8
并运行命令
sudo dpkg-reconfigure locales
要么
sudo locale-gen
德比安
只需执行\“ dpkg-reconfigure locales \”并选择必要的语言环境(ja_JP.UTF-8)
我不知道该如何在其他系统上使用,请尝试通过关键字“ locale-gen locale \”搜索服务器操作系统。
在php文件中,在打开csv文件之前,添加以下行
setlocale(LC_ALL,\'ja_JP.UTF-8\');
, 看起来可能与PHP Bug 48507相同。
您是否曾在运行代码之前尝试更改过PHP语言环境设置,然后又对其进行了重置?
, 您可能要考虑此库。我记得曾经使用过它,它比内置的处理CSV文件的PHP函数要好得多。がんばって!
, 可能是iconv字符编码可以帮助您
http://php.net/manual/zh/function.iconv.php
, 您可以不使用fgetcsv
和朋友而手动完成此操作:
<?php
$file = file(\'http://google.com.....etc/etc\');
foreach ($file as $row) {
$row = preg_split(\'/,(?!(?:[^\",]|[^\"],[^\"])+\")/\',trim($row));
foreach ($row as $n => $cell) {
$cell = str_replace(\'\\\\\"\',\'\"\',trim($cell,\'\"\'));
echo \"$n > $cell\\n\";
}
}
另外,您也可以选择一种更巧妙的闭包方式:
<?php
$file = file(\'http://google.com.....etc/etc\');
array_walk($file,function (&$row) {
$row = preg_split(\'/,trim($row));
array_walk($row,function (&$cell) {
$cell = str_replace(\'\\\\\"\',\'\"\'));
});
});
foreach ($file as $row) foreach ($row as $n => $cell) {
echo \"$n > $cell\\n\";
}