php 在 csv 中写入希伯来语/UTF-8
php write hebrew / UTF-8 in csv
您好,我正在尝试编写一个包含希伯来语文本的 CSV。它写了一些符号而不是希伯来语文本。下面是我的 PHP 代码。
<?php
$list = array (
array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
array('123', '456', '789'),
array('"שלטל"', '"שלטל"')
);
$fp = fopen('file.csv', 'w');
//fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
我在互联网上查看并添加了“fputs($fp, $bom =( chr(0xEF) .chr(0xBB) .chr(0xBF) ))”但是它没有成功。有人能帮我吗。
下面是我得到的输出。
只需 运行 您的代码。文本已正确编码且生成的 csv 有效。在支持希伯来语文本的文本编辑器中打开 CSV 将正确显示。要打开包含希伯来语的 CSV,您需要按照建议的说明进行操作 here
更新:
原来 MS 使用的是 UTF-16 而不仅仅是它使用的是 UTF-16LE(小端)。要正确打开 MS CSV,您需要 UTF-16LE 编码文本、制表符分隔文件。
$list = array (
array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
array('123', '456', '789'),
array('"שלטל"', '"שלטל"')
);
$fp = fopen('file.csv', 'w');
//UTF-16LE BOM
fputs($fp, chr(0xFF) . chr(0xFE));
foreach ($list as $fields) {
$out = '';
foreach ($fields as $k => $v){
$fields[$k] = mb_convert_encoding($v, 'UTF-16LE', 'UTF-8');
}
// UTF-16LE tab
$out = implode(chr(0x09).chr(0x00), $fields);
// UTF-16LE new line
fputs($fp, $out.chr(0x0A).chr(0x00));
}
fclose($fp);
以上代码有效,但不确定其效率。
我想我以前遇到过这种情况,有时 excel 的某些版本没有显示正确的 utf8 characters/fonts。但文件本身已经有 utf8。
尝试在 Notepad++ 中打开你的 csv,看看它是否是 utf8-bom 以及它是否显示 utf8 字符
您好,我正在尝试编写一个包含希伯来语文本的 CSV。它写了一些符号而不是希伯来语文本。下面是我的 PHP 代码。
<?php
$list = array (
array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
array('123', '456', '789'),
array('"שלטל"', '"שלטל"')
);
$fp = fopen('file.csv', 'w');
//fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
我在互联网上查看并添加了“fputs($fp, $bom =( chr(0xEF) .chr(0xBB) .chr(0xBF) ))”但是它没有成功。有人能帮我吗。
下面是我得到的输出。
只需 运行 您的代码。文本已正确编码且生成的 csv 有效。在支持希伯来语文本的文本编辑器中打开 CSV 将正确显示。要打开包含希伯来语的 CSV,您需要按照建议的说明进行操作 here
更新:
原来 MS 使用的是 UTF-16 而不仅仅是它使用的是 UTF-16LE(小端)。要正确打开 MS CSV,您需要 UTF-16LE 编码文本、制表符分隔文件。
$list = array (
array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
array('123', '456', '789'),
array('"שלטל"', '"שלטל"')
);
$fp = fopen('file.csv', 'w');
//UTF-16LE BOM
fputs($fp, chr(0xFF) . chr(0xFE));
foreach ($list as $fields) {
$out = '';
foreach ($fields as $k => $v){
$fields[$k] = mb_convert_encoding($v, 'UTF-16LE', 'UTF-8');
}
// UTF-16LE tab
$out = implode(chr(0x09).chr(0x00), $fields);
// UTF-16LE new line
fputs($fp, $out.chr(0x0A).chr(0x00));
}
fclose($fp);
以上代码有效,但不确定其效率。
我想我以前遇到过这种情况,有时 excel 的某些版本没有显示正确的 utf8 characters/fonts。但文件本身已经有 utf8。
尝试在 Notepad++ 中打开你的 csv,看看它是否是 utf8-bom 以及它是否显示 utf8 字符