我有以下问题:当我尝试保存名称中包含分号的文件时,它会返回页面上字符的巨大而奇怪的堆栈跟踪。我试图逃避、修剪和替换那些分号,但结果还是一样。我使用以下正则表达式:
$value =~ s/([^a-zA-Z0-9_\-.]|;)/uc sprintf("%%%02x",ord($1))/eg;
(我什至|;
单独添加了部分..)
所以,当我打开文件写入并调用print
函数时,它会返回很多奇怪的东西,比如:
PK!}�3y�[Content_Types].xml ���/�h9\�?�0���cz��:� �s_����o���>�T��
(它是一个巨大的,这只是它的一部分)。
有什么办法可以避免这种情况吗?
先感谢您!
编辑:
只是感兴趣 -PK
这个字符串的责任是什么?我的意思是我可以理解这些字符只是文件的内容,但什么是PK
?为什么它显示内容类型?
编辑 2.0:
我正在上传 .docx 文件 - 当名称不包含分号时,它可以正常工作。这是文件保存的代码:
open (QSTR,">", "$dest_file") or die "can't open output file: $qstring_file";
print QSTR $value;
close (QSTR);
编辑 3.0
这是一个 .cgi 脚本,在将一些数据发布到服务器后调用。它必须以键值对的方式将有关上传文件的一些信息(名称、内容、大小)保存到临时文件中。因此,任何包含分号的文件都会导致此错误。
编辑 4.0 找到原因:
上传参数时的 CGI 参数函数将分号作为分隔符!有没有办法在文件头中转义它?