Php fgetcsv选择性地忽略希伯来文字母
我试图阅读希伯来文的CSV文件,以便向Wordpress插入多篇文章。 我已将excel工作表保存为CSV(以逗号分隔)。 在升华文本中进行了一些编码操作之后,我通常在任何文本编辑器中都可以看到希伯来文内容 但是,当我尝试使用Php fgetcsv选择性地忽略希伯来文字母,php,wordpress,excel,csv,encoding,Php,Wordpress,Excel,Csv,Encoding,我试图阅读希伯来文的CSV文件,以便向Wordpress插入多篇文章。 我已将excel工作表保存为CSV(以逗号分隔)。 在升华文本中进行了一些编码操作之后,我通常在任何文本编辑器中都可以看到希伯来文内容 但是,当我尝试使用fgetcsv读取文件内容时,会有选择地忽略希伯来文字母,即字段中以数字或拉丁文字母开头的字母正确显示。数字/拉丁字母前的希伯来文字母将被忽略,并从输出中省略 如果我使用file\u get\u contents并使用var\u dump,我会正确地获取整个内容,因此问题在
fgetcsv
读取文件内容时,会有选择地忽略希伯来文字母,即字段中以数字或拉丁文字母开头的字母正确显示。数字/拉丁字母前的希伯来文字母将被忽略,并从输出中省略
如果我使用file\u get\u contents
并使用var\u dump,我会正确地获取整个内容,因此问题在于fgetcsv
functions.php中的代码
:
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename)) {
return FALSE;
}
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header):
$header = $row;
else:
$data[] = $row;
endif;
}
fclose($handle);
}
return $data;
}
使用:
if (isset($_FILES['events'])) {
extract($_FILES['events']);
$events = csv_to_array($tmp_name);
给这个世界带来的语言
tu PAAMAYIM_NEKUDOTAYIM
现在在希伯来文字母方面出现问题的可能性不大;-)
(var_dump
可能还不够!)Manvel的解决方案可能会对您有所帮助:
问题是该函数返回UTF-8(它可以使用
mb\u检测编码
),但不转换,这些字符
以UTF-8为例。因此,有必要对其进行反向转换
使用初始编码(Windows-1251或CP1251)。但是自从
fgetcsv
返回一个数组,我建议编写一个自定义函数:
function customfgetcsv(&$handle, $length, $separator = ';'){
if(($buffer = fgets($handle, $length)) !== false) {
return explode( $separator, iconv( "CP1251", "UTF-8", $buffer ) );
}
return false;
}
那么CSV文件现在到底是如何编码的呢?我用ISO8859-8在Sublime中重新打开了它,然后将它保存为UTF-8。如果我直接以UTF-8的形式打开它,我会得到一个问号。我最终使用了一个不同的自定义函数:我将整个内容作为一个字符串读取,并将其分解两次——用EOL和逗号。