Php 使用fgetcsv在浏览器中启用提取和显示外语内容

Php 使用fgetcsv在浏览器中启用提取和显示外语内容,php,csv,utf-8,header,fgetcsv,Php,Csv,Utf 8,Header,Fgetcsv,身份证;英语[英语];中文[zh];德语[德语];印地语[你好];印地语(多哥)[hi_TG];日语[ja] Source[local].AlarmGroup[AlarmText_02].ID[1310:90];放卷机:Accu位置差异太大。检查层压板是否断裂;拆卷器: 蓄存器位置差过大。 检查复合片材是否中断;薄板层积体:一层板层积体;290;;巻出装置: アキュムレーター位置の差が大きすぎます。 ラミネートが壊れていないか確認してください Source[local].AlarmGroup[

身份证;英语[英语];中文[zh];德语[德语];印地语[你好];印地语(多哥)[hi_TG];日语[ja] Source[local].AlarmGroup[AlarmText_02].ID[1310:90];放卷机:Accu位置差异太大。检查层压板是否断裂;拆卷器: 蓄存器位置差过大。 检查复合片材是否中断;薄板层积体:一层板层积体;290;;巻出装置: アキュムレーター位置の差が大きすぎます。 ラミネートが壊れていないか確認してください Source[local].AlarmGroup[AlarmText_02].ID[1311:91];放卷机:Accu level太小,无法自动拼接;拆卷器: 自动拼接的蓄存器级别过小;Abwickler:Akku Füllstand zu klein Für Autospleiss;291;;巻出装置: 自動紙継を行うにはアキュムレーターのレベルが小さすぎます

我正在尝试获取如上所述的csv内容:

csv文件另存为Unicode文本。它有汉语、德语、日语。 我无法获取正确格式的外语

CSV阅读器代码
header('Content-Type:text/html;charset=utf-8');
$row=1;
$up_file='text_SHOT_S.csv';
setlocale(LC_ALL,“en_US.UTF-8”);
如果($handle=fopen($up_file,“r”)!==FALSE){
while(($data=fgetcsv($handle,1000,“;”)!==FALSE){
$num=计数($data);
$row++;
对于($c=0;$c<$num;$c++){
回显$data[$c]。
; } } fclose($handle);}
以下代码的输出: 身份证戼㹲䔀渀最氀椀猀栀 嬀攀渀崀㰀牢>中文[zh]戼㹲䜀攀爀洀愀渀 嬀搀攀崀㰀牢>印地语[你好]戼㹲䠀椀渀搀椀 ⠀吀伀䜀伀⤀ 嬀栀椀开吀䜀崀㰀牢>日语[ja]戼㹲匀漀甀爀挀攀嬀氀漀挀愀氀崀⸀䄀氀愀爀洀䜀爀漀甀瀀嬀䄀氀愀爀洀吀攀砀琀开 ㈀崀⸀䤀䐀嬀㄀㌀㄀ 㨀㤀 崀㰀牢>放卷机:Accu位置差异太大。检查层压板是否断裂戼㹲였睢桓ᩖ⃿쐀墄桛䵖湏읝➏ə‰쀀൧࡙䝔偲⽧♦ⵔ굎㱥牢>薄板层积器:总厚度位置-薄板层积器位置戼㹲㈀㤀 㰀牢>戼㹲ff艹앑溈㩿  ꈀ괰ﰰ뼰ﰰ䴰湏湿䱝✰䵙夰丰縰夰Ȱ‰�촰ﰰ젰䰰쨰豘昰䐰樰䐰䬰먰赸垊昰估怰唰䐰ര㰀牢>源[本地].AlarmGroup[AlarmText_02].ID[1311:91]戼㹲唀渀眀椀渀搀攀爀㨀 䄀挀挀甀 氀攀瘀攀氀 琀漀漀 猀洀愀氀氀 昀漀爀 愀甀琀漀 猀瀀氀椀挀攀㰀牢>拆卷器: 自动拼接的蓄存器级别过小戼㹲䄀戀眀椀挀欀氀攀爀㨀 䄀欀欀甀 䘀ﰀ氀氀猀琀愀渀搀 稀甀 欀氀攀椀渀 昀ﰀ爀 䄀甀琀漀猀瀀氀攀椀猀猀㰀牢>291戼㹲㰀牢>巻出装置: 自動紙継を行うにはアキュムレーターのレベルが小さすぎます 戼㹲㰀牢

我要么检查垃圾字符,要么将大部分内容转换成中文。 还尝试了
标题('Content-Type:text/html;charset=iso-8859-1')
setlocale(LC_CTYPE,'zh_CN.UTF-8','zh_zh.big5')

我希望输出与CSV内容相同


提前谢谢。

请在阅读此答案之前,阅读不同的内容

Mudassir,您可以通过文件的比较器(参见img)看到乌龟的精确字符集

您的软件使用的不是utf-8,而是utf-16编码。如果无法更改此项,则可以使用

我已经尝试了你的文件和这个函数,它工作正常。参见代码:

header('Content-Type: text/html; charset=utf-8');
$row = 1;
$up_file = 'text_SHOT_S.csv';
setlocale(LC_ALL, 'en_US.UTF-8');
if (($handle = fopen($up_file, "r")) !== FALSE) {   
     while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
           // echo $data[$c].'<br>';
           echo mb_convert_encoding($data[$c],'utf8','utf-16').'<br>';
        }
    }
    fclose($handle);}
header('Content-Type:text/html;charset=utf-8');
$row=1;
$up_file='text_SHOT_S.csv';
setlocale(LC_ALL,“en_US.UTF-8”);
如果($handle=fopen($up_file,“r”)!==FALSE){
while(($data=fgetcsv($handle,1000,“;”)!==FALSE){
$num=计数($data);
$row++;
对于($c=0;$c<$num;$c++){
//回显$data[$c]。
; echo mb_convert_编码($data[$c],'utf8','utf-16')。
; } } fclose($handle);}
为了读取CSV内容,我使用PHPExcel并将UTF-16文件转换为UTF-8,然后它将正确获取中文内容

请参阅下面的链接,了解如何将UTF-16文件转换为UTF-8

要转换文件,只需调用
convert\u file\u To\u utf8()
函数 并将要转换的文件的文件路径传递给它。这个 函数然后使用PHP函数
file\u get\u contents()
打包 将文件的内容输入字符串变量,然后将其传递给 将字符串从UTF-16转换为 如有必要,使用UTF-8编码。最后,它使用
file\u put\u contents()
来 将生成的字符串填充回原始文件,覆盖 原始文件内容

功能utf16到utf8($str){
$c0=ord($str[0]);
$c1=作战需求文件($str[1]);
如果($c0==0xFE&&$c1==0xFF){
$be=true;
}如果($c0==0xFF&&$c1==0xFE),则为else{
$be=false;
}否则{
返回$str;
}
$str=substr($str,2);
$len=strlen($str);
$dec='';
对于($i=0;$i<$len;$i+=2){
$c=($be)?ord($str[$i])>12和0x0F));
$dec.=chr(0x80 |($c>>6)和0x3F));
$dec.=chr(0x80 |($c>>0)和0x3F));
}否则{
$dec.=chr(0xC0 |($c>>6)和0x1F));
$dec.=chr(0x80 |($c>>0)和0x3F));
}
}
返回$dec;
}
函数convert_file_to_utf8($csvfile){
$utfcheck=文件获取内容($csvfile);
$utfcheck=utf16到utf8($utfcheck);
文件内容($csvfile,$utfcheck);
}

您是否尝试使用utf8_en |解码功能?是的,我尝试过,它仍然不工作。我尝试过使用open office calc制作CSV并复制/通过您的代码,我没有问题。。。如何创建csv?尝试使用open office calc:excel不能正确地在utf8中写入/读取我必须为这种特殊类型的csv文件制作工具,该文件的类型为Unic
header('Content-Type: text/html; charset=utf-8');
$row = 1;
$up_file = 'text_SHOT_S.csv';
setlocale(LC_ALL, 'en_US.UTF-8');
if (($handle = fopen($up_file, "r")) !== FALSE) {   
     while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) {
           // echo $data[$c].'<br>';
           echo mb_convert_encoding($data[$c],'utf8','utf-16').'<br>';
        }
    }
    fclose($handle);}
function utf16_to_utf8($str) {

    $c0 = ord($str[0]);
    $c1 = ord($str[1]);

    if ($c0 == 0xFE && $c1 == 0xFF) {
        $be = true;
    } else if ($c0 == 0xFF && $c1 == 0xFE) {
        $be = false;
    } else {
        return $str;
    }

    $str = substr($str, 2);
    $len = strlen($str);
    $dec = '';
    for ($i = 0; $i < $len; $i += 2) {
        $c = ($be) ? ord($str[$i]) << 8 | ord($str[$i + 1]) :
                ord($str[$i + 1]) << 8 | ord($str[$i]);
        if ($c >= 0x0001 && $c <= 0x007F) {
            $dec .= chr($c);
        } else if ($c > 0x07FF) {
            $dec .= chr(0xE0 | (($c >> 12) & 0x0F));
            $dec .= chr(0x80 | (($c >> 6) & 0x3F));
            $dec .= chr(0x80 | (($c >> 0) & 0x3F));
        } else {
            $dec .= chr(0xC0 | (($c >> 6) & 0x1F));
            $dec .= chr(0x80 | (($c >> 0) & 0x3F));
        }
    }
    return $dec;
}

function convert_file_to_utf8($csvfile) {

    $utfcheck = file_get_contents($csvfile);
    $utfcheck = utf16_to_utf8($utfcheck);
    file_put_contents($csvfile, $utfcheck);
}