Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.csv文件中写入时PHP的编码问题_Php_Web Scraping_Utf 8_Character Encoding - Fatal编程技术网

在.csv文件中写入时PHP的编码问题

在.csv文件中写入时PHP的编码问题,php,web-scraping,utf-8,character-encoding,Php,Web Scraping,Utf 8,Character Encoding,我正在使用一个php数组,其中包含一些从以前的刮取过程(使用Simple HTMLDOM Parser)解析的值。我通常可以打印/回显此数组的值,该数组包含特殊字符é、á、è等。但是,问题如下: 当我使用fwrite在.csv文件中保存值时,某些字符未成功保存。例如,Székesfehérvár在我的php视图中以HTML的形式显示,但另存为Szé;凯斯菲é;rv和225;r在我用上面的php脚本生成的.csv文件中 我已经在php脚本中设置了一些内容: 我正在抓取的页面似乎是

我正在使用一个php数组,其中包含一些从以前的刮取过程(使用
Simple HTMLDOM Parser
)解析的值。我通常可以
打印
/
回显
此数组的值,该数组包含特殊字符
é、á、è等。但是,问题如下:

当我使用
fwrite
在.csv文件中保存值时,某些字符未成功保存。例如,
Székesfehérvár
在我的php视图中以
HTML
的形式显示,但另存为
Szé;凯斯菲é;rv和225;r
在我用上面的php脚本生成的
.csv
文件中

我已经在php脚本中设置了一些内容:

  • 我正在抓取的页面似乎是utf-8编码的
  • 我的PHP脚本在标题中也声明为utf-8
  • 我在代码中的不同位置尝试了很多
    iconv
    mb_encode
    方法
  • 注意当我使用json_encode为我的php数组创建一个JS console.log时,字符也会被破坏,可能与我正在抓取的页面的原始编码有关
这是脚本的一部分,它是在
.csv
文件中写入值的部分


将这一行放在代码中

header('Content-Type: text/html; charset=UTF-8');

希望这对你有帮助

将这一行放在代码中

header('Content-Type: text/html; charset=UTF-8');

希望这对你有帮助

Excel在显示utf8编码的csv文件时出现问题。我以前见过这个。但您可以尝试utf8 BOM。我试过了,对我有用。这只是将这些字节添加到utf8字符串的开头:

$line_txt .= chr(239) . chr(187) . chr(191) . $item . "\t";
有关更多信息:


或者,您可以使用Excel中的文件导入功能,并确保文件源显示为
65001:Unicode(UTF8)
。它应该正确显示您的文本,您需要将其保存为Excel文件以保留格式。

Excel在显示utf8编码的csv文件时遇到问题。我以前见过这个。但您可以尝试utf8 BOM。我试过了,对我有用。这只是将这些字节添加到utf8字符串的开头:

$line_txt .= chr(239) . chr(187) . chr(191) . $item . "\t";
有关更多信息:


或者,您可以使用Excel中的文件导入功能,并确保文件源显示为
65001:Unicode(UTF8)
。它应该正确显示您的文本,您需要将其保存为Excel文件以保留格式。

解决方案(由@misorude提供):

从网页中刮取HTML内容时,调试中显示的内容与脚本中真正刮取的内容之间存在差异。我不得不使用
html\u entity\u decode
,让PHP解释我所获取的html代码的真实值,而不是浏览器的解释

要在将值存储到某个位置之前验证值的良好检索,可以尝试在JS中使用console.log来查看值是否正确驱动:

PHP

//decoding numeric HTML entities who represents "Sóstói Stadion"
$b = html_entity_decode("Sóstói Stadion"); 
Javascript(要测试):


var b=;
//正确打印“Sóstói体育场”
控制台日志(b);

解决方案(由@misorude提供):

从网页中刮取HTML内容时,调试中显示的内容与脚本中真正刮取的内容之间存在差异。我不得不使用
html\u entity\u decode
,让PHP解释我所获取的html代码的真实值,而不是浏览器的解释

要在将值存储到某个位置之前验证值的良好检索,可以尝试在JS中使用console.log来查看值是否正确驱动:

PHP

//decoding numeric HTML entities who represents "Sóstói Stadion"
$b = html_entity_decode("Sóstói Stadion"); 
Javascript(要测试):


var b=;
//正确打印“Sóstói体育场”
控制台日志(b);
试试看


$file = fopen('myFileName.csv','w');
$data= array_map("utf8_decode", $data);
fputcsv($file,$data);

试试看


谢谢,但是它已经在脚本中了,但是我简化了文章的代码部分。(本文中还提到:“我的PHP脚本在标题中也声明为utf-8”)。THX当你要打开下载的CSV文件时,请选择编码类型:UTF-8检查一下。谢谢,但是它已经在脚本中了,但是我简化了文章的代码部分。(本文中还提到:“我的PHP脚本在标题中也声明为utf-8”)。THX当您要打开下载的CSV文件时,请选择编码类型:UTF-8进行检查。“我正在删除的页面似乎是UTF-8编码的”-更确切地说,您正在删除的页面实际上已经使用这些数字实体来表示这些字符。您可能只是没有注意到,因为您在浏览器将调试输出解释为HTML后查看了它们
html\u entity\u decode
应该会有帮助。@misorude,谢谢你的帮助。我真的不理解你的评论,让我补充一下:当我对我的
$data
数组执行
打印时,所有字符都是可用的,但问题是当我尝试对这个数组执行其他操作时,例如对JS执行
json\u encode
,或者写入.csv。你明白我什么意思吗?这是一个
print#r(“Szé;kes”)-注意到什么了吗?是的,
print\u r
return
Székes
。接下来,我使用
htmlentities
获取值的原始数字实体,但我现在的问题是:如何将值存储为
Székes
而不是
Szé;kes
?thx@misorude“是的,
print\u r
return
Székes
”-那么你现在明白我最初的评论了吗?“例如,如何将值存储为
Székes
,而不是
Szé;kes
?”—通过将您拥有的值转换为您想要的值—您当前拥有
Szé;kes
。不,我并没有说要使用
htmlentities
“我正在废弃的页面似乎是utf-8编码的”——它看起来更像是