Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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
Php BOM或\xFF\xFE显示 在csv文件中_Php_Csv - Fatal编程技术网

Php BOM或\xFF\xFE显示 在csv文件中

Php BOM或\xFF\xFE显示 在csv文件中,php,csv,Php,Csv,需要将数组转换为显示在csv文件中 下面是示例代码 $output=array( array('firstname' => 'latviešu', 'lastname' => 'Johnson', 'age' => 25), array('firstname' => 'русский', 'lastname' => 'latviešu', 'age' => 25), array('firstname' => 'šAmanda', 'lastname' =

需要将数组转换为显示在csv文件中

下面是示例代码

$output=array(
array('firstname' => 'latviešu', 'lastname' => 'Johnson', 'age' => 25),
array('firstname' => 'русский', 'lastname' => 'latviešu', 'age' => 25),
array('firstname' => 'šAmanda', 'lastname' => 'Miller', 'age' => 18),
array('firstname' => 'english', 'lastname' => 'русский', 'age' => 25.04),
);

header('Pragma: public');
header('Content-type: application/x-msexcel'); 
header('Content-Disposition: attachment;  filename="utf8_bom.xls"');

foreach($output as $row) {
$implode = (implode("\t", $row)). "\r\n" ;
$implode = mb_convert_encoding($implode, 'UTF-16LE', 'UTF-8'); 
echo $implode = "\xFF\xFE" . $implode;
}
csv输出是这样的

正如您看到的,从第二行开始,每个单词前面都有一个字符。当我复制html中的字符时,get


如果删除
\xFF\xFE
,则没有此类字符,但文本通常不可读。试图修剪
,但通常不可读

如何删除该字符

解决方案

这是最终的解决方案

foreach($output as $row) {
if(!$flag) {
$implode = (implode("\t", array_keys($row))). "\r\n" ;
$implode = mb_convert_encoding($implode, 'UTF-16LE', 'UTF-8'); 
echo $implode = "\xFF\xFE" . $implode;
$flag = true;
}
$implode = (implode("\t", array_values($row))). "\r\n" ;
$implode = mb_convert_encoding($implode, 'UTF-16LE', 'UTF-8'); 
echo $implode;
}
但下一个问题与代码有关

在数组的末尾
数组('firstname'=>'english','lastname'=>'crmkССц','age'=>25.04),
25.04
;但是,在csv中获取
25.Apr


如何解决此问题?

一块UTF-16编码文本需要以BOM开头。BOM表不得在文本中重复。您当前正在为每一行输出BOM表。不要这样做,只需在文件开头输出一次。

一块UTF-16编码的文本需要以BOM开头。BOM表不得在文本中重复。您当前正在为每一行输出BOM表。不要这样做,只需在文件开头输出一次。

我认为您需要在文件开头添加BOM表,但是
mb\u convert\u编码将其添加到每行。如果可能,请尝试以下操作:

$utf = '';

foreach($output as $row) {
    $utf .= (implode("\t", $row)). "\r\n" ;
}

$utf = mb_convert_encoding($implode, 'UTF-16LE', 'UTF-8'); 
echo $utf;

我认为您需要在文件的开头添加BOM表,但是
mb\u convert\u encoding
会在每一行添加BOM表。如果可能,请尝试以下操作:

$utf = '';

foreach($output as $row) {
    $utf .= (implode("\t", $row)). "\r\n" ;
}

$utf = mb_convert_encoding($implode, 'UTF-16LE', 'UTF-8'); 
echo $utf;

是的,我知道。但是什么是解决方案。。。如果不回显
\xFF\xFE
,则文本不可读。如果要回音,就要那个角色……是的,我知道。但是什么是解决方案。。。如果不回显
\xFF\xFE
,则文本不可读。如果要回音,就要那个角色…哦,谢谢!!!几乎一整天都在试图找到解决办法。哦我将发布工作代码。顺便说一下,下一个问题。。。。在数组中
'age'=>25.04
,但在输出中为25.04。如何修复它?你是说Excel如何解释“25.04”?是的,如果我能理解Excel如何解释25.04,思考如何获得解决方案会很有用……不知道。我讨厌激情四射。四处搜索,我敢肯定我以前看过讨论过的内容。:)谢谢:)我必须使用Excel/csv。。。编码会计软件,有必要能够出口到EXCEL哦,谢谢!!!几乎一整天都在试图找到解决办法。哦我将发布工作代码。顺便说一下,下一个问题。。。。在数组中
'age'=>25.04
,但在输出中为25.04。如何修复它?你是说Excel如何解释“25.04”?是的,如果我能理解Excel如何解释25.04,思考如何获得解决方案会很有用……不知道。我讨厌激情四射。四处搜索,我敢肯定我以前看过讨论过的内容。:)谢谢:)我必须使用Excel/csv。。。编码会计软件,必须能够导出到excel