質問: 添付ファイルのファイル名をサニタイズする ユーザーがアップロードした添付ファイルのファイル名をサニタイズする方法を探しています。私はwordpressがすでにそれをしていると思ったが、私はユーザーが「°」を含む添付ファイルをアップロードした後に問題に直面しました。そのように添付ファイルはダウンロードできません。私はこのwp関数を見つけました:sanitize_file_name($filename) 内部でそれを使用する方法はありますかadd_attachment アクション?ありがとう
回答: 質問のコメントから続くsanitize_file_name_charsにフィルタをかけて無効な文字の配列に学位記号を追加することはできますが、アップロードが中断されることはなく、単にファイル拡張子が削除されます。ただし、上記のフィルタの直後に追加されるsanitize_file_nameフィルタを追加することで、ちょっとした方法でアップロードを停止する別のフィルタを追加できます。ファイル拡張子が存在するかどうかがわかります。無効なchars配列を使用すると、フィルタ内でdie()を使用することができます。これにより、アップロードプロセスがhttpエラーを返すようになります(これは単に黙って死ぬほうが良いでしょう)。add_filter( 'sanitize_file_name_chars', 'restrict_filename_chars' ); function restrict_filename_chars( $special_chars ) { $special_chars = array_merge( array( '°' ), $special_chars ); return $special_chars; } add_filter( 'sanitize_file_name', 'die_on_no_ext' ); function die_on_no_ext( $filename ) { global $parts; if( $parts < 2 ) die(-1); return $filename; } これは理想的な解決策ではありません。チケットで何が起こるかがわかります(私は何かが足りない可能性があります。ファイル検証の専門家ではありません)。注:フィルタは実際のファイル名が学位記号を含まず、「投稿名」(つまり添付ファイルのタイトル)を含まないようにするだけです。添付ファイルのタイトルのサニタイズを処理するには別のフィルタが必要です。これはさまざまな関数やフィルタによって処理されるためです。