2 votes

ajax json convertir ampersand en html caractère spécial

J'ai un script PHP script qui renvoie une réponse json_encodée comme suit :

//PHP
$response = array('type' => 'success', 'content' => '&&!%$#!some words');
echo json_encode($response);
return;

Maintenant, le JS prend la réponse et essaie de mettre le contenu dans une zone de texte :

 $('#some_form').ajaxForm({

    success: function(resp){

        if(resp.type === 'success')
        {

            $('#text_area').val(resp.content);

        }

    },
    dataType: 'json'
});

Le contenu du script s'affiche comme suit dans la zone de texte :

&&!%$#!some words

Pourquoi les esperluettes sont-elles perturbées, mais pas les autres types de ponctuation ? Existe-t-il un moyen de contourner ce problème ? Je voudrais que les esperluettes apparaissent comme des esperluettes normales dans la zone de texte.

1voto

Shedokan Points 875

Vous pourriez résoudre votre problème en utilisant html() au lieu de val().

Le problème survient lorsque vous essayez d'insérer un & en utilisant la fonction val() qui, dans tous les cas, transforme le & en & car le & est réservé en html et si vous voulez l'utiliser pour afficher une esperluette, vous devez utiliser &.

Mais comme & est du html et que la fonction val() n'insère que du texte, elle transforme à nouveau "&" en html, de sorte que le texte "&" s'affiche dans le navigateur.

0voto

aziz punjani Points 14933

Le code ci-dessous produirait le json suivant {"type" : "success", "content" : "&&!%$#!some words"}

 $response = array('type' => 'success', 'content' => '&&!%$#!some words');
        echo json_encode($response);
        return;

Je ne vois pas où les caractères spéciaux sont convertis en entités html. Je soupçonne qu'il se passe plus de choses qu'il n'y paraît.

0voto

lamp_scaler Points 307

Je viens de regarder le code du plugin jquery form. Il y a un cas spécial dans lequel les téléchargements de fichiers sont traités différemment (et la partie que j'utilise également). Les détails de ce fonctionnement se trouvent ici : http://jquery.malsup.com/form/#file-upload

Mais ce qui se passe, c'est qu'il utilise un appel à innerHTML pour récupérer le contenu. Cela convertit en fait les choses en chaînes de caractères html.

Je l'ai augmenté de manière à ce qu'il encode d'abord l'URL, puis la décode, afin de préserver l'intégrité du texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X