Dieser Artikel stellt hauptsächlich die Lösung für das Problem vor, dass der Wert des Ajax-Übermittlungsparameters mit dem HTML-Tag nicht erfolgreich übermittelt werden kann. Es ist sehr gut und hat einen Referenzwert 🎜>Ich habe kürzlich als Ressource im Unternehmen gearbeitet. Bei der Artikel-Upload-Funktion ist ein kleines Problem aufgetreten.
Diese Funktion ähnelt der Verwendung eines Rich-Text-Editors zum Veröffentlichen von Informationen, verwendet jedoch Ajax zum Übermitteln von Daten, sodass der übermittelte Parameterwert zwangsläufig HTML-Tags enthält.
Es gab kein Problem, den Code lokal auszuführen, und die Übermittlung kann immer erfolgreich sein. Wenn der Code jedoch online bereitgestellt wird, konnte ich mich lange nicht täuschen lassen Es hat lange gedauert, bis ich das Problem gefunden habe.
Der Grund, warum die Übermittlung nicht erfolgreich war, liegt darin, dass meine Übermittlungsdaten HTML-Tags enthalten und meine Zieladresse nicht direkt angefordert werden kann.
Dann lautet die Lösung wie folgt: 1. Verwenden Sie die JS Base64-Kodierung (ähnlich der Verschlüsselung) auf der Seite mit dem Parameterwert von das HTML-Tag.
2. Nachdem Sie die Daten an der Zieladresse erhalten haben, verwenden Sie die Base64-Dekodierungsmethode im Hintergrund, um die erhaltenen Daten zu dekodieren.
Das Folgende ist der Base64-Codierungs- und Decodierungsmethodencode meines JS:
//下面是64个基本的编码 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var base64DecodeChars = new Array( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); //编码的方法 function base64encode(str) { var out, i, len; var c1, c2, c3; len = str.length; i = 0; out = ""; while(i < len) { c1 = str.charCodeAt(i++) & 0xff; if(i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt((c1 & 0x3) << 4); out += "=="; break; } c2 = str.charCodeAt(i++); if(i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt((c2 & 0xF) << 2); out += "="; break; } c3 = str.charCodeAt(i++); out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)); out += base64EncodeChars.charAt(c3 & 0x3F); } return out; } //解码的方法 function base64decode(str) { var c1, c2, c3, c4; var i, len, out; len = str.length; i = 0; out = ""; while(i < len) { do { c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while(i < len && c1 == -1); if(c1 == -1) break; do { c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while(i < len && c2 == -1); if(c2 == -1) break; out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); do { c3 = str.charCodeAt(i++) & 0xff; if(c3 == 61) return out; c3 = base64DecodeChars[c3]; } while(i < len && c3 == -1); if(c3 == -1) break; out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); do { c4 = str.charCodeAt(i++) & 0xff; if(c4 == 61) return out; c4 = base64DecodeChars[c4]; } while(i < len && c4 == -1); if(c4 == -1) break; out += String.fromCharCode(((c3 & 0x03) << 6) | c4); } return out; } function utf16to8(str) { var out, i, len, c; out = ""; len = str.length; for(i = 0; i < len; i++) { c = str.charCodeAt(i); if ((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out; } function utf8to16(str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; while(i < len) { c = str.charCodeAt(i++); switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += str.charAt(i-1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } } return out; }
Die Seite ruft die JS-Methode auf, um den Base64-Codierungscode wie folgt auszuführen:
var articleContent = editor.getContent(); articleContent = base64encode(utf16to8(articleContent));
Aber, Ich bin auf ein weiteres neues Problem gestoßen, nachdem ich JS zum Base64-Kodieren der Daten verwendet hatte. JS hat tatsächlich das Pluszeichen (+) durch ein Leerzeichen ersetzt, was dazu führte, dass die von meiner Hintergrundmethode dekodierten Daten falsch waren.
Die Lösung lautet wie folgt: Ich habe zuerst die JS-Methode replace() zum Ersetzen verwendet, aber es ist ein Fehler aufgetreten habe gerade mein erstes A-Leerzeichen durch ein Pluszeichen (+) ersetzt. Die endgültige Lösung ist wie folgt.
Ersetzen Sie im Hintergrund (unter der Zielempfangsadresse) die Leerzeichen durch das Pluszeichen (+) für die erhaltenen Daten. Der Code lautet wie folgt: string content = Request["content"].ToString();
if (content.Contains(""))
{
content=content.Replace(" ", "+");
}
//byte[] sa = Convert.FromBase64String(content);
//Encoding Ansi = Encoding.GetEncoding("GB2312");
// content = Ansi.GetString(sa);
content = Base64Decrypt(content);//Base64解码
/// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public static string Base64Encrypt(string input) { return Base64Encrypt(input, new UTF8Encoding()); } /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <param name="encode">字符编码</param> /// <returns></returns> public static string Base64Encrypt(string input, Encoding encode) { return Convert.ToBase64String(encode.GetBytes(input)); } /// <summary> /// Base64解密 /// </summary> /// <param name="input">需要解密的字符串</param> /// <returns></returns> public static string Base64Decrypt(string input) { return Base64Decrypt(input, new UTF8Encoding()); } /// <summary> /// Base64解密 /// </summary> /// <param name="input">需要解密的字符串</param> /// <param name="encode">字符的编码</param> /// <returns></returns> public static string Base64Decrypt(string input, Encoding encode) { return encode.GetString(Convert.FromBase64String(input)); }
Ajax-Beitragsanfrage-Sprungseite
Die Ajax-Einreichungsformularseite wird schnell aktualisiert
Zwei Lösungen dafür, dass Ajax ein neues Fenster öffnet und vom Browser blockiert wird
Das obige ist der detaillierte Inhalt vonDie Lösung für das Problem, dass der Ajax-Übermittlungsparameterwert HTML-Tags enthält und nicht erfolgreich übermittelt werden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!