Heim > Artikel > Web-Frontend > So verwenden Sie die js-Kodierungsfunktion encodeURIComponent für die Quellcode-Analyse
function URIAddEncodedOctetToBuffer(octet, result, index) { result[index++] = 37; // Char code of '%'. result[index++] = hexCharCodeArray[octet >> 4]; result[index++] = hexCharCodeArray[octet & 0x0F]; return index; }function URIEncodeOctets(octets, result, index) { if (hexCharCodeArray === 0) { // 0-F hexCharCodeArray = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70]; } index = URIAddEncodedOctetToBuffer(octets[0], result, index); if (octets[1]) index = URIAddEncodedOctetToBuffer(octets[1], result, index); if (octets[2]) index = URIAddEncodedOctetToBuffer(octets[2], result, index); if (octets[3]) index = URIAddEncodedOctetToBuffer(octets[3], result, index); return index; }// 对unicode中除了代理对外的字符编码function URIEncodeSingle(cc, result, index) { var x = (cc >> 12) & 0xF; var y = (cc >> 6) & 63; var z = cc & 63; // unicode最多值是三个字节 var octets = new InternalArray(3); // ascii码 if (cc <= 0x007F) { octets[0] = cc; } else if (cc <= 0x07FF) { octets[0] = y + 192; octets[1] = z + 128; } else { octets[0] = x + 224; octets[1] = y + 128; octets[2] = z + 128; } return URIEncodeOctets(octets, result, index); }function URIEncodePair(cc1 , cc2, result, index) { var u = ((cc1 >> 6) & 0xF) + 1; var w = (cc1 >> 2) & 0xF; var x = cc1 & 3; var y = (cc2 >> 6) & 0xF; var z = cc2 & 63; var octets = new InternalArray(4); octets[0] = (u >> 2) + 240; octets[1] = (((u & 3) << 4) | w) + 128; octets[2] = ((x << 4) | y) + 128; octets[3] = z + 128; return URIEncodeOctets(octets, result, index); }// ECMA-262, section 15.1.3function Encode(uri, unescape) { uri = TO_STRING(uri); var uriLength = uri.length; var array = new InternalArray(uriLength); var index = 0; for (var k = 0; k < uriLength; k++) { var cc1 = %_StringCharCodeAt(uri, k); if (unescape(cc1)) { array[index++] = cc1; } else { if (cc1 >= 0xDC00 && cc1 <= 0xDFFF) throw MakeURIError(); // 非高代理项 if (cc1 < 0xD800 || cc1 > 0xDBFF) { index = URIEncodeSingle(cc1, array, index); } else { // 高代理项 k++; if (k == uriLength) throw MakeURIError(); var cc2 = %_StringCharCodeAt(uri, k); // 不是合法的低代理项 if (cc2 < 0xDC00 || cc2 > 0xDFFF) throw MakeURIError(); index = URIEncodePair(cc1, cc2, array, index); } } } var result = %NewString(array.length, NEW_ONE_BYTE_STRING); for (var i = 0; i < array.length; i++) { %_OneByteSeqStringSetChar(i, array[i], result); } return result; }// ECMA-262 - 15.1.3.4function URIEncodeComponent(component) { var unescapePredicate = function(cc) { if (isAlphaNumeric(cc)) return true; // ! if (cc == 33) return true; // '()* if (39 <= cc && cc <= 42) return true; // -. if (45 <= cc && cc <= 46) return true; // _ if (cc == 95) return true; // ~ if (cc == 126) return true; return false; }; return Encode(component, unescapePredicate); }
Der Implementierungsprozess von URIEncodeComponent besteht darin, die Encode-Funktion zum Codieren direkt aufzurufen. Verwenden Sie zunächst die unescapePredicate-Funktion, um einige Sonderzeichen zu überspringen . Einzelheiten finden Sie im Code. Das grundlegende Projekt besteht darin, Zeichen für Zeichen zu durchlaufen. Wenn das aktuelle Zeichen ein niedriges Ersatzzeichen ist, wird ein Fehler gemeldet (cc1 >= 0xDC00 && cc1 2555ea0e7bead509a56dafba2e5c1ba8 0xDBFF), und rufen Sie dann direkt die URIEncodeSingle-Funktion zur Codierung auf. Wenn das aktuelle Zeichen als hoher Ersatz codiert ist, entfernen Sie die nächste Ziffer Wenn die Zeichenfolgenlänge überschritten wird, wird ein Fehler gemeldet. Wenn das nächste Bit kein Low-Ersatz ist, wird ein Fehler gemeldet, da auf den High-Ersatz ein Low-Ersatz folgen muss Die Funktion URIEncodePair wird aufgerufen, um das Ersatzpaar zu kodieren. Die Encode-Funktion bestimmt hauptsächlich, ob es sich bei dem Zeichen um ein Zeichen handelt, für das keine Codierung erforderlich ist, ob es sich um ein Ersatzpaar handelt und ob es sich um ein gewöhnliches Zeichen handelt.
Der grundlegende Prozess der URIEncodeSingle-Funktion besteht darin, eine Operation an einem Zeichen auszuführen und schließlich die URIEncodeOctets-Funktion aufzurufen, um die Byte-Codierung durchzuführen. Die maximale Größe des Unicode-Codes beträgt drei Bytes, daher ist die Array-Länge in der Funktion URIEncodeSingle als 3 definiert. Der grundlegende Prozess der URIEncodePair-Funktion besteht darin, eine Operation an den High- und Low-Surrogaten durchzuführen. Die High- und Low-Surrogate umfassen insgesamt vier Bytes und rufen dann die Funktion URIEncodeOctets auf, um die vier Bytes zu codieren.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die js-Kodierungsfunktion encodeURIComponent für die Quellcode-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!