次の問題があります。名前にセミコロンを含むファイルを保存しようとすると、ページ上の文字の巨大で奇妙なスタックトレースが返されます。これらのセミコロンをエスケープし、トリムして置き換えようとしましたが、結果は同じです。次の正規表現を使用します。
$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 パラメータ関数は、区切り文字としてセミコロンをカウントします! ファイルヘッダーでエスケープする方法はありますか?