wake-up-neo.com

Sichere Zeichen für freundliche URL

Ich muss eine Website erstellen, die Artikel enthält, und ich möchte freundliche URLs dafür erstellen, z. B. die URL der Seite mit

Titel: Artikel Test

soll werden: http://www.example.com/articles/article_test.

Natürlich muss ich einige Zeichen aus dem Titel entfernen wie ? oder #, aber ich bin nicht sicher, welche ich entfernen soll.

Kann mir jemand sagen, welche Charaktere sicher sind?

153
Paulo

So zitieren Sie Abschnitt 2.3 von RFC 3986 :

"Zeichen, die in einem URI zulässig sind, aber keinen reservierten Zweck haben, werden als nicht reserviert bezeichnet. Dazu gehören Groß- und Kleinbuchstaben, Dezimalstellen, Bindestrich, Punkt, Unterstrich und Tilde."

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

Beachten Sie, dass RFC 3986 weniger reservierte Interpunktionszeichen auflistet als das ältere RFC 2396 .

187
Skip Head

Es gibt zwei Arten von Zeichen, auf die Sie achten müssen: reserviert und nsicher.

Die reservierten Zeichen sind:

  • et-Zeichen ("&")
  • dollar ("$")
  • pluszeichen ("+")
  • komma (",")
  • schrägstrich ("/")
  • doppelpunkt (":")
  • semikolon (";")
  • gleich ("=")
  • fragezeichen ("?")
  • 'At' Symbol ("@")
  • pfund ("#").

Die Zeichen, die allgemein als nsicher betrachtet werden, sind:

  • platz (" ")
  • kleiner als und größer als ("<>")
  • klammern öffnen und schließen ("[]")
  • klammern öffnen und schließen ("{}")
  • pipe ("|")
  • backslash ("\")
  • caret ("^")
  • prozent ("%")

Ich habe vielleicht einen oder mehrere vergessen, was dazu führt, dass ich Carl Vs Antwort wiederhole. Auf lange Sicht ist es wahrscheinlich besser, eine "weiße Liste" zulässiger Zeichen zu verwenden und die Zeichenfolge dann zu codieren, als zu versuchen, mit Zeichen Schritt zu halten, die von Servern und Systemen nicht zugelassen werden.

101
Gary.Ray

Sie behalten am besten nur einige Zeichen (Whitelist) bei, anstatt bestimmte Zeichen (Blacklist) zu entfernen.

Sie können technisch jedes Zeichen zulassen, solange Sie es richtig codieren. Zur Beantwortung dieser Frage sollten Sie jedoch nur die folgenden Zeichen zulassen:

  1. Kleinbuchstaben (Großbuchstaben in Kleinbuchstaben umwandeln)
  2. Zahlen von 0 bis 9
  3. Ein Strich - oder Unterstrich _
  4. Tilde ~

Alles andere hat möglicherweise eine besondere Bedeutung. Sie können beispielsweise annehmen, dass Sie + verwenden können, es kann jedoch durch ein Leerzeichen ersetzt werden. & ist auch gefährlich, insbesondere wenn einige Umschreiberegeln verwendet werden.

Überprüfen Sie wie bei den anderen Kommentaren die Normen und Spezifikationen für vollständige Details.

39
carl

Immer sicher

Diese sind (in der Theorie/Spezifikation) sicher, im Grunde genommen überall außer dem Domain-Namen.
Prozentcodieren Sie alles, was nicht aufgeführt ist, und Sie können loslegen.

    A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;

Manchmal sicher

Nur sicher, wenn in bestimmten URL-Komponenten verwendet; mit Vorsicht verwenden.

    Paths:     + & =
    Queries:   ? /
    Fragments: ? / # + & =

Niemals sicher

Gemäß der URI-Spezifikation (RFC 3986) müssen alle anderen Zeichen in Prozent codiert sein. Das beinhaltet:

    <space> <control-characters> <extended-ascii> <unicode>
    % < > [ ] { } | \ ^

Wenn maximale Kompatibilität von Bedeutung ist, beschränken Sie den Zeichensatz auf A-Z a-z 0-9 - _.
(mit Punkten nur für Dateinamenerweiterungen).

25
Beejor

Wenn Sie sich RFC3986 - Uniform Resource Identifier (URI): Generic Syntax ansehen, dreht sich Ihre Frage um die Pfadkomponente eines URI.

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

In Abschnitt 3.3 sind gültige Zeichen für einen URI segment vom Typ pchar:

pchar = unreserviert/pct-codiert/untergeordnet/":"/"@"

Welches gliedert sich in:

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

pct-encoded

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

":" / "@"

Oder mit anderen Worten: Sie können ein beliebiges (Nicht-Steuer-) Zeichen aus der ASCII-Tabelle , ausgenommen/, ?, #, [ Und ].

Dieses Verständnis wird durch RFC1738 - Uniform Resource Locators (URL) gestützt.

16
Philzen

nicht reserviert = ALPHA/DIGIT/"-"/"."/"_"/"~"

12
LKK

Aus dem von Ihnen beschriebenen Kontext gehe ich davon aus, dass es sich bei dem, was Sie tatsächlich machen wollen, um einen so genannten SEO-Slug handelt. Die allgemein bekannteste Praxis für diese ist:

  1. In Kleinbuchstaben konvertieren
  2. Konvertieren Sie ganze Zeichenfolgen außer a-z und 0-9 in einen Bindestrich (-) (keine Unterstriche)
  3. Entfernen Sie "Stoppwörter" aus der URL, d. H. Wörter, die nicht sinnvoll indiziert werden können, wie "a", "an" und "the". Google 'Stoppwörter' für umfangreiche Listen

Als Beispiel würde ein Artikel mit dem Titel "Die Verwendung von! @% $ * Zur Darstellung von Fluchen in Comics" eine Menge "Verwendung-Fluchen-Comics" enthalten.

11
chaos

Das Format für einen URI ist in RFC 3986 definiert. Einzelheiten finden Sie in Abschnitt 3.3.

6
joschi

Aus SEO-Sicht werden Bindestriche gegenüber Unterstrichen bevorzugt. In Kleinbuchstaben konvertieren, alle Apostrophe entfernen und dann alle nicht alphanumerischen Zeichenfolgen durch einen einzelnen Bindestrich ersetzen. Schneiden Sie überschüssige Bindestriche am Anfang und Ende ab.

6
mpen

Ich hatte ein ähnliches Problem, ich wollte hübsche URLs haben und kam zu dem Schluss, dass ich nur Buchstaben, Ziffern und _ in URLs zulassen muss. Das ist in Ordnung, dann habe ich ein paar nette reguläre Ausdrücke geschrieben und festgestellt, dass alle UTF8-Zeichen keine Buchstaben in .NET sind und verschraubt wurden. Dies scheint ein bekanntes Problem für die .NET-Regex-Engine zu sein. SO Ich bin zu dieser Lösung gekommen:

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 chars, because
/// .NET impl of regext do not handle unicode chars. 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 "-";
    }
}
3
Lubomir Toshev

Ich fand es sehr nützlich, meine URL in eine sichere zu verschlüsseln, als ich einen Wert über ajax/php an eine URL zurückgab, die dann erneut von der Seite gelesen wurde.

PHP-Ausgabe mit URL-Encoder für das Sonderzeichen &

//PHP returning the sucess info of ajax request
echo "".str_replace('&','%26',$_POST['name'])." category was changed";

//javascript sending the value to url
window.location.href='time.php?return=updated&val='+msg;

//javascript/php executing the function printing the value of the url,
//now with the text normally lost in space because of the reserved & character.

setTimeout("infoApp('updated','<?php echo $_GET['val'];?>');",360);

Hoffe, jemand findet meine kleinen Code-Auszüge nützlich! :)

1
DIY-Forum

Ich denke, Sie suchen nach etwas wie "URL-Kodierung" - Kodierung einer URL, damit die Verwendung im Web "sicher" ist:

Hier ist eine Referenz dafür. Wenn Sie keine Sonderzeichen möchten, entfernen Sie einfach alle Zeichen, die eine URL-Codierung erfordern:

http://www.w3schools.com/TAGS/ref_urlencode.asp

0
Andy White