【问题标题】:htmlspecialchars remove the value inside the array?htmlspecialchars 删除数组内的值?
【发布时间】:2018-03-31 03:16:00
【问题描述】:

所以我正在上传一个 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 文件。它的字符集是未知的 8 位。我通过另存为将 CSV 文件转换为 UTF-8。之后,我设法成功上传了 CSV 文件。问题在于 CSV 文件的编码。

是否可以将文件转换为 UTF-8?

【问题讨论】:

  • 文件是utf8?还是你读文件使用utf8?你能显示你的代码吗?谢谢
  • @lighter 什么文件? csv?
  • 是的 csv 文件,你能显示你读取的文件代码吗?
  • 你能粘贴pre()的定义吗?否则很难回答你的问题:)

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


【解决方案1】:

根据php.net的htmlspecialchars页面:

“如果输入字符串在给定编码中包含无效的代码单元序列,则将返回空字符串,除非设置了 ENT_IGNORE 或 ENT_SUBSTITUTE 标志。”

所以解决方法是:使用“$variable = htmlspecialchars($string, ENT_IGNORE);” 您可以使用“htmlspecialchars”和数组映射创建一个函数,该函数像这样 -

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

【讨论】:

  • 这会删除单引号。我需要保留单引号。
  • 我猜你的 php(读取 csv 文件)文件不是 utf-8 格式,它仍然使用 ISO-8859-1 格式。使用您之前的代码将您的 php 文件转换为没有 BOM 的 UTF-8。如果它不起作用,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2018-05-17
  • 2012-08-26
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多