$content = "\xEF\xBB\xBF".$content//添加BOM
确保输出$content前没有任何其他东西输出。
何为BOM,它是Windows用来标记文本文件的编码方式的,你可以在网上查查相关BOM资料。
//这是我前几天回答过的一个问题下面以读取淘宝csv文件为例if($result){ //如果上传成功了,这是文件路径
if (!($handle = fopen_utf8($result, "r")) === FALSE){ //调取下边函数fopen_utf8
$errorArr = array()
$i=0
while (($cols = fgetcsv($handle, 1000, "\t")) !== FALSE) {
++$i
if($i<4) continue
$taobaolmsx = $cols[21]//宝贝属性
$taobaoxxsx = $cols[30]//销售属性
$goodsBn = $cols[33]//商家编码
}
fclose($handle)
}
unlink($result)
}else{
echo 'file upload error'exit
}
/*读取csv文件用 */
function fopen_utf8($filename){
$encoding=''
$handle = fopen($filename, 'r')
$bom = fread($handle, 2)
rewind($handle)
if($bom === chr(0xff).chr(0xfe) || $bom === chr(0xfe).chr(0xff)){
// UTF16 Byte Order Mark present
$encoding = 'UTF-16'
} else {
$file_sample = fread($handle, 1000) + 'e' //read first 1000 bytes
// + e is a workaround for mb_string bug
rewind($handle)
$encoding = mb_detect_encoding($file_sample , 'UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP')
}
if ($encoding){
stream_filter_append($handle, 'convert.iconv.'.$encoding.'/UTF-8')
}
return ($handle)
}
可以尝试在获得提交的CSV之后再对数据编码一次
提及CSV之后你不是要通过虚幻去逐行读取数据吗,
在逐行读取数据的之前,先对这一行 的所有数据进行二次编码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)