Zeichenbegrenzung einer Javascript-String-Variablen

Lesezeit: 4 Minuten

Benutzeravatar von Rohith
Rohith

Kann JavaScript-String 100.000 Zeichen speichern? Ich habe ein Skript geschrieben, bei dem ein String aus PHP an eine Variable in JavaScript übergeben wird. Es funktioniert gut, wenn es auf fast zehntausend Zeichen gekürzt wird, aber das Skript wird unterbrochen, wenn versucht wird, die gesamte Zeichenfolge zu übergeben, deren Länge etwas mehr als 100 KB beträgt. Es konnten jedoch keine Fehler gefunden werden. Gibt es dafür eine Lösung, um die Zeichenbeschränkung der JavaScript-Variablen zu erhöhen? Ich bin nur ein Anfänger. Würde mich freuen, wenn jemand eine Lösung dafür finden könnte.

  • Was meinst du mit “bricht das Skript”?

    – Xymostech

    4. Dezember 2012 um 6:51 Uhr

  • Siehe stackoverflow.com/questions/5926263/… für einige relevante Informationen. Meine Vermutung ist, dass das Limit in PHP liegt, nicht in JS.

    – jfriend00

    4. Dezember 2012 um 6:52 Uhr

  • Öffnen Sie die JS-Konsole und probieren Sie es selbst aus. str = ""; for(var i = 0; i < 100000; i++) { str = str + "x"; } dann tippen str und drücken Sie die Eingabetaste. Schau was passiert.

    – Richard Router

    4. Dezember 2012 um 6:57 Uhr

  • mein Browser stürzt ab..

    – Herr Verleg

    19. Januar 2016 um 15:21 Uhr

Der ECMAScript-Standard ECMA-262 (6. Auflage, Juni 2015) sagt

6.1.4 Der String-Typ

Der String-Typ ist die Menge aller geordneten Sequenzen von null oder mehr 16-Bit-Ganzzahlwerten ohne Vorzeichen (“Elemente”) bis zu einer maximalen Länge von 253-1 Elemente.

Planen Sie also nicht, mehr als 9.007.199.254.740.991 oder etwa 9 Billiarden Zeichen zu verwenden. Natürlich sollten Sie auf Systeme vorbereitet sein, die keine 18-PB-Blöcke Speicher zuweisen können, da dies für konforme ECMAScript-Implementierungen nicht erforderlich ist.

Benutzeravatar von Jack G
Jack G

Ich denke, die Frage betrifft die praktische Grenze, nicht die Spezifikationsgrenze. Und nein, es ist nicht immer die Menge an RAM, die Sie haben. Ich habe einen x86_64-PC mit 24 GB, auf dem Linux Mint mit x86_64-Firefox und x86_64-Chrome ausgeführt wird, und die Grenzen, auf die ich stieß, waren:

  • 1.073.741.822-Grenze in Firefox 84
  • 536.870.888-Grenze in Chrome 87

Je höher und Firefox wirft ein Uncaught RangeError: repeat count must be less than infinity and not overflow maximum string sizewährend Chrome wirft Uncaught RangeError: Invalid string length. Verwenden Sie das folgende Snippet, um eine binäre Suche nach der maximalen Zeichenfolgenlänge in Ihrem Browser auszuführen:

for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
    try {" ".repeat(startPow2);} catch(e) {
        break;
    }

var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
    try {
        " ".repeat(mask + startPow2);
        mask += startPow2; // the previous statement succeeded
    } catch(e) {}

console.log("The max string length for this browser is " + mask);

  • Ich denke, das ist eine fantastische Antwort, und ich denke, es ist ein Verbrechen, dass meine Antwort (so solide sie auch sein mag) 25-mal so viele Stimmen hat. Stimmen Sie dafür, Leute!

    – Karl

    12. Juli 2021 um 20:05 Uhr

Es gibt keine theoretische Begrenzung für JS oder PHP in Bezug auf die Größe ihrer Zeichenfolgen.

Ich denke, es gibt ein paar mögliche Situationen.

Überprüfen Sie zunächst, dass Sie Ihren String nicht über HTTP GET senden. Es gibt eine maximale Größe für GET und ich denke, es hängt von Ihrem Webserver ab.

Zweitens, wenn Sie POST verwenden, prüfen Sie in php.ini nach post_max_size und sehen Sie, ob es kleiner als die Stringgröße ist, die Sie dorthin senden, sowie in Ihrer .htaccess-Datei, um zu sehen, ob php_value post_max_size nicht zu klein ist.

Drittens überprüfen Sie in php.ini, dass Ihr memory_limit nicht die Größe des Speichers einschränkt, den Ihr Skript verwenden kann.

hoffe das hilft.

  • Danke für deine Antwort. Ich habe das Javascript auf derselben PHP-Seite geschrieben und weise die PHP-Variable einer Javascript-Variablen auf derselben Seite zu. Wenn ich die Variable echoe, kann ich die Ausgabe sehen, aber sobald sie js zugewiesen ist, wird darunter nichts ausgeführt.

    – Rohith

    4. Dezember 2012 um 23:12 Uhr

  • nur ein Schuss, aber haben Sie einzelne Anführungszeichen oder doppelte Anführungszeichen neu generiert, die dazu führen können, dass Ihr js bricht. bist du ihnen entkommen, bevor du zu js gegangen bist? Gibt es einen Fehler in der Javascript-Konsole?

    – Aaron Lee

    5. Dezember 2012 um 8:03 Uhr


  • Es gibt keinen Fehler in der Javascript-Konsole. Es werden auch keine einfachen und doppelten Anführungszeichen neu generiert.

    – Rohith

    6. Dezember 2012 um 0:35 Uhr

  • Ich habe sogar versucht, den Wert von PHP direkt js zuzuweisen, da ich die Ausgabe von PHP wiedergegeben und in das Skript kopiert habe, anstatt sie dynamisch zu übergeben. Es funktionierte trotzdem nicht. Seltsamerweise werden keine Fehler angezeigt.

    – Rohith

    6. Dezember 2012 um 1:57 Uhr

  • Tut mir leid, ich darf mich nicht an meine Unternehmensnormen halten. Jedenfalls kann ich dir eine bessere Vorstellung geben. Ich hole Daten aus der MySQL-Datenbank und speichere sie als Zeichenfolge. Es verkettet sich und wird abhängig von der abgerufenen Datenmenge sehr groß. Diese Zeichenfolge wird an die Javascript-Variable übergeben, um mit jqplot ein Diagramm zu generieren. Alles funktioniert gut, es sei denn, die Zeichenfolge ist etwa 100.000 Zeichen lang. String mit einer Länge von fast 50.000 funktioniert gut. Ich dachte, die jqplot-Funktion würde brechen, aber nichts unter der Zeile, in der die Variable übergeben wird, wird ausgeführt.

    – Rohith

    6. Dezember 2012 um 3:34 Uhr

1404100cookie-checkZeichenbegrenzung einer Javascript-String-Variablen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy