SlugGenerator.app

Sonderzeichen in URL-Slugs behandeln: Ein Entwicklerleitfaden

6 Min. Lesezeit

Die meisten Slug-Generatoren funktionieren mit reinem englischem Text problemlos. Doch die reale Welt hat Akzentbuchstaben, nicht-lateinische Schriften, Emojis und Symbole. Dieser Leitfaden zeigt, wie Sie all das beim Erzeugen von URL-Slugs behandeln.

Das Problem: URLs haben einen begrenzten Zeichensatz

URLs dürfen sicher nur ASCII-Zeichen enthalten: Buchstaben (a-z), Ziffern (0-9) und einige Symbole wie Binde- und Unterstriche. Alles andere muss entweder umgewandelt oder prozentkodiert werden (etwa %C3%A9 für é). Prozentkodierte URLs sind hässlich, schwer lesbar und schlecht für SEO. Die Lösung ist Transliteration.

Transliteration: Die zentrale Technik

Transliteration wandelt Zeichen einer Schrift in ihr nächstliegendes ASCII-Äquivalent um. Einige gängige Beispiele:

EingabeTransliteriertSprache
é, è, ê, ëeFranzösisch, Portugiesisch
ü, ö, äue, oe, aeDeutsch
ñnSpanisch
ßssDeutsch
çcFranzösisch, Portugiesisch

Unser Slug-Generator führt die Transliteration automatisch durch, wenn die Option „Transliterieren“ aktiviert ist.

Unicode-Normalisierung

Vor der Transliteration müssen Sie Unicode-Text normalisieren. Das Zeichen é kann in Unicode auf zwei Arten gespeichert werden:

  • Zusammengesetzt (NFC): ein einzelner Codepunkt (U+00E9)
  • Zerlegt (NFD): der Buchstabe „e“ gefolgt von einem kombinierenden Akzentzeichen (U+0065 + U+0301)

Beide sehen auf dem Bildschirm identisch aus, sind aber unterschiedliche Bytes. Die Normalisierung auf NFKD (Kompatibilitätszerlegung) trennt den Grundbuchstaben vom Akzentzeichen, sodass sich die Akzente leicht entfernen lassen:

// JavaScript
function removeAccents(text) {
  return text
    .normalize('NFKD')
    .replace(/[\u0300-\u036f]/g, '');
}

removeAccents('Café Résumé');
// Output: Cafe Resume

CJK-Zeichen (Chinesisch, Japanisch, Koreanisch)

CJK-Zeichen lassen sich nicht sinnvoll ins Lateinische transliterieren. Es gibt zwei gängige Ansätze:

  1. Romanisierung verwenden (Pinyin für Chinesisch, Romaji für Japanisch). Bibliotheken wie pinyin (npm) oder kuroshiro können das, aber die Ergebnisse entsprechen womöglich nicht den Erwartungen der Nutzer.
  2. Die Zeichen unverändert lassen. Moderne Browser und Suchmaschinen verarbeiten Unicode-URLs gut. Google kann URLs mit CJK-Zeichen indexieren. Die URL wird in der Adressleiste prozentkodiert, in den Suchergebnissen aber korrekt angezeigt.

Für die meisten Fälle ist Option 2 sicherer—romanisierter CJK-Text kann für Muttersprachler unleserlich sein.

Emojis in URLs

Technisch möglich (Emojis werden prozentkodiert), aber Emojis in Slugs sind eine schlechte Idee:

  • Sie werden zu extrem langen prozentkodierten Zeichenketten
  • Sie brechen in vielen Systemen und APIs
  • Suchmaschinen indexieren sie womöglich nicht korrekt
  • Sie lassen sich nicht manuell eintippen

Entfernen Sie Emojis bei der Slug-Erzeugung immer. Ein einfaches Regex-Muster kann sie entfernen:

text.replace(/[\u{1F600}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/gu, '')

Häufige Sonderzeichen

So behandelt ein guter Slug-Generator häufige Sonderzeichen:

ZeichenAktionGrund
&Durch „and“ ersetzen oder entfernenHat in URLs eine besondere Bedeutung
@, #, ?, =EntfernenReservierte URL-Zeichen
“ ” ‘ ’EntfernenSatzzeichen, kein semantischer Wert im Slug
— –Durch Bindestrich ersetzenÄhnlicher Zweck, auf Trennzeichen normalisieren
/ \Durch Bindestrich ersetzenSchrägstriche erzeugen Pfadsegmente

Ihren Slug-Generator testen

Testen Sie mit diesen kniffligen Eingaben, ob Ihr Slug-Generator Grenzfälle bewältigt:

  • "Café Menu — Special Édition!"cafe-menu-special-edition
  • "100% Free & Open Source"100-free-and-open-source
  • " Lots of spaces "lots-of-spaces
  • "---triple---hyphens---"triple-hyphens
  • Leerer String → sollte leer oder einen Fallback zurückgeben

Probieren Sie diese Beispiele direkt in unserem Tool Slugify Online aus und sehen Sie, wie es jeden Fall behandelt.

Bibliotheksunterstützung

Für einen tieferen Vergleich von Slug-Bibliotheken über Sprachen hinweg lesen Sie unseren Leitfaden dazu, wie man Text in JavaScript, Python und PHP slugifiziert. Jede Bibliothek behandelt Sonderzeichen anders—wählen Sie also eine, die zu Ihrem Anwendungsfall passt.