Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

String.prototype.toWellFormed()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Oktober 2023 browserübergreifend verfügbar.

Die Methode toWellFormed() von String-Werten gibt einen String zurück, in dem alle einzelstehenden Surrogate des ursprünglichen Strings durch das Unicode-Ersatzzeichen U+FFFD ersetzt wurden.

Syntax

js
toWellFormed()

Parameter

Keine.

Rückgabewert

Ein neuer String, der eine Kopie des ursprünglichen Strings ist, wobei alle einzelstehenden Surrogate durch das Unicode-Ersatzzeichen U+FFFD ersetzt wurden. Wenn str wohlgeformt ist, wird dennoch ein neuer String zurückgegeben (im Wesentlichen eine Kopie von str).

Beschreibung

Strings in JavaScript sind UTF-16-codiert. Die UTF-16-Codierung verwendet sogenannte Surrogatpaare, die im Abschnitt UTF-16-Zeichen, Unicode-Codepunkte und Graphemcluster ausführlich erläutert werden.

toWellFormed() durchläuft die Codeeinheiten des Strings und ersetzt jedes einzelstehende Surrogat durch das Unicode-Ersatzzeichen U+FFFD �. Dadurch ist der zurückgegebene String wohlgeformt und kann in Funktionen verwendet werden, die wohlgeformte Strings erwarten, beispielsweise encodeURI. Im Vergleich zu einer eigenen Implementierung ist toWellFormed() effizienter, da JavaScript-Engines direkt auf die interne Darstellung von Strings zugreifen können.

Wenn nicht wohlgeformte Strings in bestimmten Kontexten verwendet werden, etwa mit TextEncoder, werden sie automatisch mit demselben Ersatzzeichen in wohlgeformte Strings umgewandelt. Auch bei der Darstellung einzelstehender Surrogate wird das Ersatzzeichen angezeigt (eine Raute mit einem Fragezeichen darin).

Beispiele

toWellFormed() verwenden

js
const strings = [
  // Lone leading surrogate
  "ab\uD800",
  "ab\uD800c",
  // Lone trailing surrogate
  "\uDFFFab",
  "c\uDFFFab",
  // Well-formed
  "abc",
  "ab\uD83D\uDE04c",
];

for (const str of strings) {
  console.log(str.toWellFormed());
}
// Logs:
// "ab�"
// "ab�c"
// "�ab"
// "c�ab"
// "abc"
// "ab😄c"

Fehler in encodeURI() vermeiden

encodeURI löst einen Fehler aus, wenn der übergebene String nicht wohlgeformt ist. Dies lässt sich vermeiden, indem Sie den String zuerst mit toWellFormed() in einen wohlgeformten String umwandeln.

js
const illFormed = "http://hfffhd3dea44e9a2d46b4s9o6vkx0nu5xu69kv.ffgi.hlju.cwkeji.cn/search?q=\uD800";

try {
  encodeURI(illFormed);
} catch (e) {
  console.log(e); // URIError: URI malformed
}

console.log(encodeURI(illFormed.toWellFormed())); // "http://hfffhd3dea44e9a2d46b4s9o6vkx0nu5xu69kv.ffgi.hlju.cwkeji.cn/search?q=%EF%BF%BD"

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-string.prototype.towellformed

Browser-Kompatibilität

Siehe auch