「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
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」というプラグインを使うと、画像等をアップロードする際に、日本語のファイル名を自動的に半角英数字に置換することができます。