所以我上传了一个csv文件。其中一列有一个单引号。
145 Test St'
数组是
(
[0] => 2
[1] => 20
[2] => 145 Test St�
[3] => Test City
[4] => 1455
[5] => 919749797
)
如你所见。它不是单引号(' ),而是�。
从这里开始,我使用 htmlspecialchars($ row),它会给出结果。
(
[0] => 2
[1] => 20
[2] =>
[3] => Test City
[4] => 1455
[5] => 919749797
)
第一个问题,为什么(')成为(�)?
第二个问题,为什么在使用 htmlspecialchars()之后,该值会消失?
第三个问题,我如何保留(' )?
感谢能够回答的人。
编辑:
$row = array_map('str_getcsv', file($_FILES['file']['tmp_name']));
$csv = Array();
$head = $row[0];
$col = count($row[0]);
unset($row[0]);
pre($row[1]);
$row[1] = array_map('htmlentities', $row[1]);
pre($row[1]);
编辑:
pre()是我创建的功能,类似于
<pre></pre>.
编辑:
我在终端使用文件--mime查看CSV文件。它的charset是未知的8位。我通过执行另存为将CSV文件转换为UTF-8。之后我成功上传了CSV文件。问题在于CSV文件的编码。
是否可以将文件转换为UTF-8?
答案 0 :(得分:0)
根据php.net&#39; htmlspecialchars页面:
&#34;如果输入字符串在给定编码中包含无效的代码单元序列,则将返回空字符串,除非设置了ENT_IGNORE或ENT_SUBSTITUTE标志。&#34;
所以解决方法是:使用&#34; $ variable = htmlspecialchars($ string,ENT_IGNORE);&#34; 您可以使用&#34; htmlspecialchars&#34;创建一个函数。和像这样的函数的数组映射 -
function specialchars($string){
return htmlspecialchars( $string, ENT_IGNORE);
}
$row = array_map('str_getcsv', file($_FILES['file']['tmp_name']));
$csv = Array();
$head = $row[0];
$col = count($row[0]);
unset($row[0]);
pre($row[1]);
$row[1] = array_map('specialchars', $row[1]);
pre($row[1]);