Maison développement back-end tutoriel php Comment résoudre le problème selon lequel la valeur du paramètre de soumission Ajax contient une balise HTML et ne peut pas être soumise avec succès ?

Comment résoudre le problème selon lequel la valeur du paramètre de soumission Ajax contient une balise HTML et ne peut pas être soumise avec succès ?

Jan 08, 2018 pm 03:33 PM
ajax html

Cet article présente principalement la solution au problème selon lequel la valeur du paramètre de soumission Ajax avec la balise html ne peut pas être soumise avec succès (ASP.NET). Il est très bon et a une valeur de référence à laquelle les amis qui en ont besoin peuvent s'y référer. J'espère que cela pourra aider tout le monde.

Cette fonction est similaire à l'utilisation d'un éditeur de texte enrichi pour publier des informations, mais utilise Ajax pour soumettre des données, de sorte que la valeur du paramètre soumise contient inévitablement des balises HTML.

Il n'y a eu aucun problème pour exécuter le code localement et la soumission peut toujours réussir. Cependant, lorsque le code est déployé en ligne, les données ne peuvent pas être soumises avec succès pendant longtemps, et cela. il m'a fallu beaucoup de temps pour trouver le problème.

La raison pour laquelle la soumission a échoué est que mes données de soumission contiennent des balises html et que mon adresse cible ne peut pas être directement demandée.

Ensuite, la solution est la suivante :

1. Utilisez l'encodage JS Base64 (similaire au cryptage) sur la page avec la valeur du paramètre de la balise html.

2. Après avoir obtenu les données à l'adresse cible, utilisez la méthode de décodage Base64 en arrière-plan pour décoder les données obtenues.

Voici le code de la méthode d'encodage et de décodage Base64 de mon 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;
  }
Copier après la connexion

La page appelle la méthode JS pour effectuer le code d'encodage Base64 comme suit :

 var articleContent = editor.getContent();
   articleContent = base64encode(utf16to8(articleContent));
Copier après la connexion

Mais j'ai rencontré un nouveau problème. Après avoir utilisé JS pour encoder les données en Base64, JS a en fait remplacé le signe plus (+) par un espace, ce qui rend les données décodées par ma méthode d'arrière-plan incorrectes.

La solution est la suivante :

J'ai d'abord utilisé la méthode JS replace() pour remplacer, mais il y a eu une erreur. JS vient de remplacer mon premier espace par un signe plus (+). . La solution finale est la suivante.

En arrière-plan (sous l'adresse de réception cible), remplacez les espaces par le signe plus (+) pour les données obtenues. Le code est le suivant :

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解码
Copier après la connexion

Si vous ne connaissez pas les méthodes d'encodage et de décodage Base64 en arrière-plan, veuillez consulter ci-dessous :

/// <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));
    }
Copier après la connexion

Recommandations associées :

Explication détaillée des paramètres JQuery AJAX avec des exemples supplémentaires

php-Je souhaite utiliser ce formulaire pour soumettre des données à la base de données, comment configurer les paramètres ajax , l'espace WEB que je loue est PHP

La page du formulaire de soumission Ajax s'actualise rapidement avec des exemples

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Bordure de tableau en HTML Bordure de tableau en HTML Sep 04, 2024 pm 04:49 PM

Guide de la bordure de tableau en HTML. Nous discutons ici de plusieurs façons de définir une bordure de tableau avec des exemples de bordure de tableau en HTML.

Marge gauche HTML Marge gauche HTML Sep 04, 2024 pm 04:48 PM

Guide de la marge HTML gauche. Nous discutons ici d'un bref aperçu de la marge gauche HTML et de ses exemples ainsi que de son implémentation de code.

Tableau imbriqué en HTML Tableau imbriqué en HTML Sep 04, 2024 pm 04:49 PM

Ceci est un guide des tableaux imbriqués en HTML. Nous discutons ici de la façon de créer un tableau dans le tableau ainsi que des exemples respectifs.

Disposition du tableau HTML Disposition du tableau HTML Sep 04, 2024 pm 04:54 PM

Guide de mise en page des tableaux HTML. Nous discutons ici des valeurs de la mise en page des tableaux HTML ainsi que des exemples et des résultats en détail.

Espace réservé d'entrée HTML Espace réservé d'entrée HTML Sep 04, 2024 pm 04:54 PM

Guide de l'espace réservé de saisie HTML. Nous discutons ici des exemples d'espace réservé d'entrée HTML ainsi que des codes et des sorties.

Liste ordonnée HTML Liste ordonnée HTML Sep 04, 2024 pm 04:43 PM

Guide de la liste ordonnée HTML. Ici, nous discutons également de l'introduction de la liste et des types HTML ordonnés ainsi que de leur exemple respectivement.

Déplacer du texte en HTML Déplacer du texte en HTML Sep 04, 2024 pm 04:45 PM

Guide pour déplacer du texte en HTML. Nous discutons ici d'une introduction, du fonctionnement des balises de sélection avec la syntaxe et des exemples à implémenter.

Bouton HTML onclick Bouton HTML onclick Sep 04, 2024 pm 04:49 PM

Guide du bouton HTML onclick. Nous discutons ici de leur introduction, de leur fonctionnement, des exemples et de l'événement onclick dans divers événements respectivement.

See all articles