【发布时间】:2014-01-12 23:04:11
【问题描述】:
我正在阅读带有 PHP COM 实用程序的 Excel 电子表格,一切正常,只是 Excel 文件中的某些单元格具有不同的语言数据。当我通过 PHP Com 读取此数据时,它显示为 ???????
$ExlApp = new COM ( "Excel.Application" );
$workbook = $ExlApp->Workbooks->Open ( 'f:\dev\htdocs\excel\testfile.xlsx' );
$worksheet = $workbook->worksheets ( 1 );
$done = false;
$row_index = 1;
while ( $done == false ) {
$english = $worksheet->cells ( $row_index, 1 )->value;
$dari = $worksheet->cells ( $row_index, 2 )->value;
if ($english != '') {
$row_index ++;
echo "<div style='float:left;width:420px'>".$english."</div><div>".$dari."</div>";
} else {
$done = true;
}
}
$workbook->close ();
我已检查页面编码并将其设置为 UTF-8。当我打开原始 excel 文件时,它显示正确的文本,但是当我从 PHP COM 读取它时,编码丢失了。有没有人有这个问题的解决方案。
编辑
如何确保 excel $worksheet->cells ( $row_index,2)->value 给出的值编码正确,或者 Excel 中是否有可以设置的属性PHP COM 所以它以 UTF-8 格式返回数据?
我已经通过 PHP 中的 mb_detect_encoding 函数检查了 Excel 单元格返回的值的编码,它给出了 ASCII,因为它必须给出 UTF-16 或 UTF-8。看来 excel 没有给出正确编码的价值。
这是我正在使用此脚本读取的 Excel 文件: http://asimishaq.com/myfiles/testfile.xlsx
请注意,该解决方案仅需要使用 PHP COM-INTEROP。
【问题讨论】:
-
这本身不是 php 问题。您只需要确保 PHP 输出到的任何介质都已被告知数据所在的字符集。例如如果您要转储到网络浏览器,则需要一个适当的
Content-type标头/元标记。 -
@marc-b 如何确保从 $worksheet->cells ( $row_index, 1)->value 返回的值编码正确?
-
要么使用 mb_convert() 及其表亲将来自电子表格的 utf 数据转换为目的地期望的任何字符集,要么告诉目的地“嘿,我正在向你发送 utf-8 "
-
@marc-b 我已经使用 mb_detect_encoding 检查了 Excel 返回值的编码,它是 ASCII。必须是 UTF-8 或 16 表示发件人 ms Excel 编码有问题?
-
我会尝试在其构造函数中设置 COM 使用的代码页:参见 php.net/manual/en/class.com.php(尝试 CP_UTF8)
标签: php excel encoding utf-8 com-interop