我有一个PHP v5.6脚本,该脚本读取上载的CSV文件,其中包含几行和几列纯文本,其中一个单元格包含JavaScript代码。这是我执行cat test.csv
...
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
设置...? :/
答案 0 :(得分:1)
如果要在浏览器中查看结果,则应将内容输出为纯文本并使用适当的字符集,因为test
(或Yikes
)周围的引号不是ASCII字符
header('Content-Type: text/plain; charset=gb18030');
var_dump($contents2);