195

記事を含む Web サイトを作成しています。タイトルに基づいて、記事に「わかりやすい」URL が必要です。

たとえば、記事のタイトルが の場合"Article Test"、URL を にしたいと考えていますhttp://www.example.com/articles/article_test

ただし、記事のタイトル (任意の文字列) には複数の特殊文字を含めることができ、URL に文字どおりに配置することはできません。たとえば、それ?または#交換する必要があることは知っていますが、他のすべてを知っているわけではありません。

URL で使用できる文字は? 保管しておくと安全なものは何ですか?

4

13 に答える 13

246

RFC 3986のセクション2.3を引用するには:

URIで許可されているが、予約された目的を持たない文字は、予約されていないと呼ばれます。これらには、大文字と小文字、10進数、ハイフン、ピリオド、アンダースコア、およびチルダが含まれます。

  ALPHA  DIGIT  "-" / "." / "_" / "~"

RFC 3986には、古いRFC2396よりも予約されている句読点が少ないことに注意してください。

于 2009-03-29T21:57:33.607 に答える
124

注意が必要な文字のセットは2つあります。予約済み安全ではありません。

予約文字は次のとおりです。

  • アンパサンド( "&")
  • ドル( "$")
  • プラス記号( "+")
  • コンマ ("、")
  • スラッシュ( "/")
  • コロン( ":")
  • セミコロン( ";")
  • 等しい( "=")
  • 疑問符( "?")
  • アットマーク( "@")
  • ポンド( "#")。

一般的に安全でないと見なされる文字は次のとおりです。

  • スペース (" ")
  • より小さいおよびより大きい( "<>")
  • 角かっこを開いたり閉じたりします( "[]")
  • 中括弧を開いたり閉じたりします( "{}")
  • パイプ( "|")
  • バックスラッシュ( "\")
  • カレット( "^")
  • パーセント( "%")

私は1つ以上を忘れた可能性があり、それは私がカールVの答えをエコーすることにつながります。長期的には、サーバーやシステムで許可されていない文字に遅れないようにするよりも、許可されている文字の「ホワイトリスト」を使用してから文字列をエンコードする方がよいでしょう。

于 2009-03-29T21:56:45.917 に答える
45

特定の文字を削除する (ブラックリスト) のではなく、一部の文字のみを保持する (ホワイトリスト) ことをお勧めします。

技術的には、適切にエンコードする限り、任意の文字を許可できます。ただし、質問の精神に沿って答えるには、次の文字のみを許可する必要があります。

  1. 小文字 (大文字を小文字に変換)
  2. 数字、0 ~ 9
  3. ダッシュ - またはアンダースコア _
  4. チルダ ~

他のすべてのものには、潜在的に特別な意味があります。たとえば、+ を使用できると思うかもしれませんが、スペースに置き換えることができます。特にいくつかの書き換えルールを使用している場合は、 & も危険です。

他のコメントと同様に、完全な詳細については規格と仕様を確認してください。

于 2009-03-29T21:48:44.783 に答える
20

RFC3986 - Uniform Resource Identifier (URI): Generic Syntaxを見ると、質問は URI のパスコンポーネントを中心に展開しています。

    foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment
      |   _____________________|__
     / \ /                        \
     urn:example:animal:ferret:nose

セクション 3.3 を引用すると、URI の有効な文字segmentのタイプは次のpcharとおりです。

pchar = unreserved / pct-encoded / sub-delims / ":" / "@"

これは次のように分類されます。

ALPHA / DIGIT / "-" / "." / "_" / "~"

pct-encoded

"!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="

":" / "@"

言い換えると、 、 、、およびを除くASCII テーブルの任意の (制御文字以外の) 文字を使用できます。 /?#[]

この理解は、RFC1738 - Uniform Resource Locators (URL)によって裏付けられています。

于 2014-07-19T01:47:13.400 に答える
12

あなたが説明している文脈から、あなたが実際に作ろうとしているのは「SEOスラッグ」と呼ばれるものだと思います。それらの最も一般的な既知の方法は次のとおりです。

  1. 小文字に変換する
  2. azおよび0-9以外の文字のシーケンス全体を1つのハイフン(-)に変換します(アンダースコアではありません)
  3. URLから「ストップワード」を削除します。つまり、「a」、「an」、「the」などの意味のない索引付け可能な単語を削除します。広範なリストのためのGoogleの「ストップワード」

したがって、例として、「コミックでの冒とくを表すための!@%$ *の使用法」というタイトルの記事は、「usage-represent-swearing-comics」のスラッグを取得します。

于 2009-03-29T22:09:20.940 に答える
11

未予約 = ALPHA / DIGIT / "-" / "." / "_" / "~"

于 2010-12-01T22:28:38.703 に答える
6

URI の形式はRFC 3986で定義されています。詳細については、セクション 3.3 を参照してください。

于 2009-03-29T21:46:37.767 に答える
6

SEO の観点からは、ハイフンはアンダースコアよりも優先されます。小文字に変換し、すべてのアポストロフィを削除してから、英数字以外のすべての文字列を 1 つのハイフンに置き換えます。先頭と末尾の余分なハイフンを削除します。

于 2009-03-29T22:19:34.083 に答える
3

同様の問題がありました。私はきれいな URL が欲しかったので、URL には文字、数字、および _ のみを許可する必要があるという結論に達しました。

それは問題ありませんが、良い正規表現を書いたところ、すべての UTF-8 文字が .NET の文字ではないことを認識し、うまくいかないことに気付きました。これは、.NET 正規表現エンジンの既知の問題のようです。だから私はこの解決策にたどり着きました:

private static string GetTitleForUrlDisplay(string title)
{
    if (!string.IsNullOrEmpty(title))
    {
        return Regex.Replace(Regex.Replace(title, @"[^A-Za-z0-9_-]", new MatchEvaluator(CharacterTester)).Replace(' ', '-').TrimStart('-').TrimEnd('-'), "[-]+", "-").ToLower();
    }
    return string.Empty;
}


/// <summary>
/// All characters that do not match the patter, will get to this method, i.e. useful for Unicode characters, because
/// .NET implementation of regex do not handle Unicode characters. So we use char.IsLetterOrDigit() which works nicely and we
/// return what we approve and return - for everything else.
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
private static string CharacterTester(Match m)
{
    string x = m.ToString();
    if (x.Length > 0 && char.IsLetterOrDigit(x[0]))
    {
        return x.ToLower();
    }
    else
    {
        return "-";
    }
}
于 2011-09-30T12:48:13.030 に答える
0

「 URLエンコーディング」のようなものを探していると思います-Webで使用しても「安全」になるようにURLをエンコードします:

そのための参考書です。特殊文字が不要な場合は、URL エンコードが必要な文字を削除してください。

HTML URL エンコーディング リファレンス

于 2009-03-29T21:47:12.600 に答える
-4

3 ~ 50 文字。小文字、数字、特殊文字 (ドット (.)、ダッシュ (-)、アンダースコア (_)、レート (@)) を含めることができます。

于 2016-02-23T15:44:00.703 に答える