拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
MTで日本語ファイル名の画像等をアップロードするとURLが切れる問題
MTQに以下のような質問が上がっていました。
今回MT6にて運用しているサイトで、PDFファイルをアップロードしたのですが、PDFファイルへのリンクが上手く生成されず404が返って来てしまいました。
PDFのファイル名が長いのが原因かと思い、全角で33文字(66bytes)あったファイル名を全角21文字(42bytes)に変更し、再度アップロードした所問題無く表示されました。
そこで質問なのですが、MTで扱うファイルにファイル名の長さ制限等があるのでしょうか?
この質問に答えます。
画像等のアイテムのURLの情報は、URLエンコードした上で、データベースのフィールドに保存するようになっています。
このフィールドの長さは255バイトになっています。
また、UTF-8の全角文字は、1文字が3バイトになることが多いです。
3バイトをURLエンコードすると9バイトになります。
33文字のファイル名だと、単純計算で33×9=297バイトになり、フィールドのサイズを越え、URLが切れる現象が起こります。
一方、21文字なら21×9=189なので、フィールドのサイズは越えません。
255÷9≒28なので、全角28文字ぐらいが上限と考えられます。
この問題のほかにも、日本語を含むファイル名は何かと扱いにくいので、Movable Typeでは極力使わないことをお勧めします。
ちなみに、ジャクスタポジション様で販売されている「ImageUploadUtility」というプラグインを使うと、画像等をアップロードする際に、日本語のファイル名を自動的に半角英数字に置換することができます。