为什么file_get_contents()无法从文件CSV文件读取某些数据

时间:2019-04-07 00:53:25

标签: php

我有一个PHP v5.6脚本,该脚本读取上载的CSV文件,其中包含几行和几列纯文本,其中一个单元格包含JavaScript代码。这是我执行cat test.csv ...

时来自Ubuntu 18.04 bash shell的输出。
First Name,Last Name
Jane,Doe
John,<script>alert(‘test’);</script>

在我的PHP脚本中,直接从超全局数组$csv = $_FILES["Uploaded_File"]["tmp_name"]中读取上载的文件。

如果我执行$contents = strip_tags(file_get_contents($csv));,则将读取JS文本单元格的内容以及所有其他纯文本单元格:var_dump($contents)显示string(55) "First Name,Last Name Jane,Doe John,alert(‘test’); "

但是,如果我执行$contents2 = file_get_contents($csv);,则将读取CSV中的所有数据,但JS文本单元格除外:var_dump($contents2)显示string(72) "First Name,Last Name Jane,Doe John, "

$contents2 = file_get_contents($csv);为什么不显示JS文本单元格?

当实际字符串的字节数多于显示的字节数时,为什么var_dump($contents2)显示string(72)

以下是脚本的摘要:...

$csv = $_FILES["Uploaded_File"]["tmp_name"];

$contents = strip_tags(file_get_contents($_FILES["Uploaded_File"]["tmp_name"]));
echo __FILE__." = ".__LINE__." = ";var_dump($contents);echo "<hr />";

$contents2 = file_get_contents($_FILES["Uploaded_File"]["tmp_name"]);
echo __FILE__." = ".__LINE__." = ";var_dump($contents2);echo "<hr />";

我阅读了有关file_get_contents()的PHP手册,但是没有提到从(https://www.php.net/manual/en/function.file-get-contents.php)读取的文件中不允许使用标签。有一个使用context的选项,但我不知道有任何选项可以解决这个问题。

也许是php.ini设置...? :/

1 个答案:

答案 0 :(得分:1)

如果要在浏览器中查看结果,则应将内容输出为纯文本并使用适当的字符集,因为test(或Yikes)周围的引号不是ASCII字符

header('Content-Type: text/plain; charset=gb18030');
var_dump($contents2);