htmlspecialchars删除数组内的值?

时间:2017-10-19 06:26:27

标签: php mongodb csv encoding export-to-csv

所以我上传了一个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?

1 个答案:

答案 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]);