Php 使用特殊字符为excel创建CSV文件

Php 使用特殊字符为excel创建CSV文件,php,excel,csv,utf-8,Php,Excel,Csv,Utf 8,我创建了一个简单的PHP脚本作为测试。我想让PHP保存一些数据的csv。这个脚本可以工作,但当我在Excel中打开它时,特殊字符会乱七八糟 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &l

我创建了一个简单的PHP脚本作为测试。我想让PHP保存一些数据的csv。这个脚本可以工作,但当我在Excel中打开它时,特殊字符会乱七八糟

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Character Test</title>
</head>

<body>
<ul>
<?php
$spanishDept = array('Swimwear'=>'Trajes de baῆo','Boys Swimwear'=>'Trajes de baῆo','Girls Swimwear'=>'Trajes de baῆo','Kids Shoes'=>'Zapatos de niῆos',"Scarves"=>'Paῆoletas','Children\'s'=>'Niῆos','Coffee Mugs'=>'Tasas para café');

$list = '"Item","Spanish"'."\r";
foreach($spanishDept AS $english=>$spanish) {
        echo '<li>'.$english.': '.$spanish.'</li>';
        $list .= '"'.$english.'","'.$spanish."\"\r";
}
$fp = fopen('theEXCELlist.csv',"w+");
fwrite($fp,$list,strlen($list)+100);
?>
</ul>
</body>
</html>

性格测试

我可以在NotePad++或Dreamweaver中打开它,一切都很好,但在Excel中不好

也许这个问题的解决方案在PHP手册的“”部分。
换句话说,PHP输出文件似乎应该是一个UTF-16小端编码文件(带有BOM)。
我不知道您使用的是哪个版本的Excel,但可能有用。

另一种方法是打开Excel,插入特殊字符,另存为CSV,最后检查这些字符在输出文件中的编码方式。

可能解决此问题的方法在于PHP手册的“”部分。
换句话说,PHP输出文件似乎应该是一个UTF-16小端编码文件(带有BOM)。
我不知道您使用的是哪个版本的Excel,但可能有用。

另一种方法可以是打开Excel,插入特殊字符,保存为CSV,最后检查这些字符是如何在输出文件中编码的。

在Excel可以处理之前,您可能需要进行一些字符转换。如果您正在编写CSV,请考虑PHP的FPTCCVS.()函数而不是创建您自己的csv字符串用新的线替换您的回车\r\n因为它们通常会导致很多麻烦,字节顺序标记实际上可能会有所帮助,因为(人们希望)它会强制Excel进入UTF8模式。您当然应该看看这里,它会让您的生活变得更加轻松,代码也不那么容易出错。这不是您正在构建的csv文件。这是一个HTML文件。在Excel可以处理之前,你可能需要做一些字符转换。如果你正在编写CSV,考虑PHP的fPcCvs-()函数,而不是创建自己的CSV StReTraseRead,你的R行返回,因为n个新的线和它们通常引起的麻烦一样多,一个字节顺序标记实际上可能有助于(如人们所希望的)。它将强制Excel进入UTF8模式。您当然应该看看这里,它会让您的生活变得更加轻松,代码也不那么容易出错。这不是您正在构建的csv文件。这是一个HTML文件。