質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

6639閲覧

アップロードした画像ファイル名をURLにしたとき、除外すべき文字

yuji38kwmt

総合スコア437

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/11/20 01:57

やりたいこと

画像をアップロードする機能を用意しています。
アップロードしたとき画像ファイルの名前を変えず、そのまま画像を参照したいです。

たとえば、ユーザが[sample.jpg]というファイルをアップロードしたら、"http://foo/sample.jpg"というURLで画像を参照できるようにしたいです。

そのため、「ファイル名にURLで使用できない文字が含まれていないか」、チェックが必要です。

質問

具体的にどんな文字を除外すればよいでしょうか?

下記サイトを見てもよく分かりませんでした。
https://www.ipentec.com/document/document.aspx?page=web-url-invalid-char
以下、疑問に思った点です。

  • 「URLに含めることのできない文字」と書いてあるが、丸括弧などファイル名に含まれいても問題なかった
  • 「予約語として定義されている文字」の「使用できるがディレクトリ名やファイル名には使用できない」の意味が分からない
  • 「区切り文字として除外されているもの」の「区切り文字」の意味が分からない

実際に、ファイル名に様々な半角記号を使って確認したところ、
「% #」の2文字のみ除外すれば、問題なさそうです。
これで合っているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

URLに使える文字の基準はRFC3986に従うものとして、疑問に思われている点について以下回答します。

•「URLに含めることのできない文字」と書いてあるが、丸括弧などファイル名に含まれいても問題なかった

どんな環境でも確実に動作させるのであれば、あくまでもRFCに従うべきです。
「問題なかった」というのは「たまたまその環境では問題がなかった」だけと捉えるべきです。
RFCに厳密な実装をしている環境(ソフトウェア)では動作しない可能性があります。

•「予約語として定義されている文字」の「使用できるがディレクトリ名やファイル名には使用できない」の意味が分からない

URL(URI)としては使える文字だがディレクトリ名・ファイル名としては使えないという意味です。
分かりやすいのが"/"で、例えば"http://www.example.co.jp/mydir1/myfile1/index.html"というURLがあるとして、"/"がファイル名・ディレクトリ名の一部だったとすると、パス構造が分からなくなりますよね。

•「区切り文字として除外されているもの」の「区切り文字」の意味が分からない

パス(eg. "/")、クエリ文字列(eg. "?","&","+","=")、アカウント(eg. "@")、ポート番号(eg. ":")に使用される「区切り文字」です。

結論としては、yuji38kwmtさんが参照されていたリンク先のRFC3986のうち「予約文字」「URLに含めることのできない文字」は全て弾くのがよいと思います。

投稿2016/11/20 04:08

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

URLに使用できない文字はない

ご提示のページは、説明の根拠とした資料も明記していませんのでまったく意味不明ですね。どうやらRFC 2396でのURLの定義に基づいているようです。

同RFCをよく読むと、URLに使用できない文字はないということがわかります。下はその説明です。


文字によってはURL中でそのまま使用すると差支えがあるので、パーセント符号化 (下記※参照) しなければなりません。逆に言えば、パーセント符号化すれば差支えのある文字も使えます。より新しいRFCのRFC 3986 (日本語訳 (非公式)) でも、この点は変わりません。

※パーセント符号化というのは、%の後に文字のコードを16進数2桁で示したものです。たとえば空白は%20、「%」という文字は%25、「=」は%3D、といった具合です。

両RFCを見比べて最低限の説明をすると

  • 非予約文字 (英大文字、英小文字、数字、"-"、"."、"_"、"~") は、URLのどこにでもそのまま使える。
  • 予約文字 (一般的な区切り子 ":"、"/"、"?"、"#"、"["、"]"、"@" や、副区切り子 "!"、"$"、"&"、"'"、"("、")"、"*"、"+"、","、";"、"=") は、URLの構成要素の区切りという特殊な意味を持つので、URL中で特殊な意味を持たない普通の文字として使いたければ、パーセント符号化する。
  • その他の文字 (空白文字、ASCII外の文字等) は、URL中ではパーセント符号化する。

ということにしておけばよさそうです。


ですが、上のような処理をご自分でいちいちプログラムとして書く必要はありません。それぞれのプログラミング言語用にURLを扱うライブラリなどがあり、構成要素を与えれば適宜パーセント符号化してURLを生成してくれます (たとえばPython 3.xではurllib.parseが使えます)。

お使いのプログラミング言語やフレームワークでどうすればよいかがわからなかったのであれば、改めて質問してください。

ファイル名に使用できない文字

URLにどんな文字でも含められるとは言っても、リンク先をファイルとしてダウンロードしたときにユーザのコンピュータに保存できないのは困ります。各OSで、次のような文字はファイル名に使えません。

これらの文字はURLのパス部にも含めないほうがいいでしょう。

投稿2016/11/20 03:56

ikedas

総合スコア4306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのため、「ファイル名にURLで使用できない文字が含まれていないか」、チェックが必要です。

「URLで使用できない文字」ではなくて、ファイル名に使用できない文字をチェックすべきでは?

拡張子が正しいかも要注意と思います。例えば、拡張子 .jpg をみて正しく Content-Type: image/jpeg を応答ヘッダに含めてくれるかとか。

投稿2016/11/20 02:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問