我有一个导出CSV文件的PHP脚本。然后我的用户在Excel中编辑文件,保存并重新上传。
如果他们在字段中键入欧元符号,则在上传文件时,欧元符号以及之后的所有内容都将丢失。我正在使用 str_getcsv 函数。
如果我尝试转换编码(比如UTF-8),欧元符号就会消失,我会得到一个缺失的字符标记(通常用空白方块或菱形中的问号表示)。
如何将编码转换为UTF-8,还保留欧元符号(和其他非标准字符)?
修改
这是我的代码:
/**
* Decodes html entity encoded characters back to their original
*
* @access public
* @param String The element of the array to process
* @param Mixed The key of the current element of the array
* @return void
*/
public function decodeArray(&$indexValue, $key)
{
$indexValue = html_entity_decode($indexValue, ENT_NOQUOTES, 'Windows-1252');
}
/**
* Parses the contents of a CSV file into a two dimensional array
*
* @access public
* @param String The contents of the uploaded CSV file
* @return Array Two dimensional-array.
*/
public function parseCsv($contents)
{
$changes = array();
$lines = split("[\n|\r]", $contents);
foreach ($lines as $line) {
$line = utf8_encode($line);
$line = htmlentities($line, ENT_NOQUOTES);
$lineValues = str_getcsv($line);
array_walk($lineValues, 'decodeArray');
$changes[] = $lineValues;
}
return $changes;
我还尝试了以下代替utf8_encode函数:
iconv("Windows-1252", "UTF-8//TRANSLIT", $line);
还有:
$line = htmlentities($line, ENT_NOQUOTES, 'Windows-1252');
使用utf8_encode函数,从字符串中删除有问题的字符。使用任何其他方法,角色和角色之后的所有内容都将丢失。
示例:
字段值:“Promo€Mobile”
被解释为:“Promo Mobile”
答案 0 :(得分:0)
将这些内容添加到CSV文件的开头
chr(239) . chr(187) . chr(191)