![](/img/trans.png)
[英]PHP output encoding issues with UTF-8 strings from MySQL databases
[英]PHP output Issues with utf-8 characters
请在我的PHP代码中遇到问题,我尝试将excel文档的所有工作表都转换为CSV,在执行PHP代码后,我知道该文档包含法语字符(例如“é,è,àç”),但我获得了一些CSV文档,但是与其他字符代替法语,例如“élé,é..)。
我使用xampp(Apache)作为Web服务器,我更改了几个参数,例如“ default_charset =“ UTF-8,AddDefaultCharset UTF-8 ..”。
有我的代码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta charset="utf-8">
<?php
header('content-type: text/html; charset: utf-8');
require_once 'Classes\PHPExcel\IOFactory.php';
$inFile = 'parc.xlsx';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($inFile);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
$index = 0;
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$objPHPExcel->setActiveSheetIndex($index);
$outFile = str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv";
$objWriter->setSheetIndex($index);
$objWriter->save($outFile);
$index++;
}
?>
谢谢,
您应该检查xlsx文件的字符编码。 如果文件是在Windows上创建的,则它可能具有Windows-1252(CP1252)字符编码。 如果是这样,则需要将其转换为UTF-8。 请参阅有关如何处理excel文件的字符编码的文档。 以下应该有用:
另请参见以下相关问题: 如何在PHP中输出Excel可以正确读取的UTF-8 CSV?
不幸的是,问题在于没有可靠的方式在CSV中编码Unicode字符。 使用UTF-8应该与大多数软件工作,但值得注意的是,当你打开根本不是那么CSV与Microsoft Excel,这只是假定的默认编码(如CP-1252)和所有非ASCII字符看起来像垃圾。
现在,您可以通过将Unicode字节顺序标记放在文档的开头来正确地解释您的UTF-8,该标记在UTF-8中表示为"\\xEF\\xBB\\xBF"
。
但是,我发现如果您随后在Excel中再次将文件修改并另存为CSV,则会删除该文件,并且随后尝试打开文件会导致垃圾回收。
一种替代解决方案是使用utf8_decode隐蔽到Latin-1(或使用多字节编码扩展/库之一隐蔽到CP-1252)。 但是,这将除去大多数Unicode字符(除精选的欧洲字符之外)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.