web-dev-qa-db-fra.com

Envoi de code HTML via JSON

J'ai un script php qui génère du contenu HTML. Existe-t-il un moyen de renvoyer ce contenu HTML via JSON à ma page Web à partir du script php?

28
Hirvesh

Oui, vous pouvez utiliser json_encode pour prendre votre chaîne HTML et l'échapper si nécessaire.

Notez que dans JSON , l'élément de niveau supérieur doit être un tableau ou un objet  (ce n'est plus vrai) , ce ne peut pas être seulement une chaîne. Vous voudrez donc créer un objet et faire de la chaîne HTML une propriété de l'objet (probablement le seul), de sorte que le JSON résultant ressemble à quelque chose comme:

{"html": "<p>I'm the markup</p>"}
27
T.J. Crowder

Toutes les données de chaîne doivent être codées en UTF-8.

$out = array(
   'render' => utf8_encode($renderOutput), 
   'text' => utf8_encode($textOutput)
);

$out = json_encode($out);
die($out);
2
blumanski

Juste pour développer @ T.J. La réponse de Crowder.

json_encode fonctionne bien avec de simples chaînes html, d'après mon expérience cependant json_encode devient souvent confus par (ou il devient assez difficile de s'échapper correctement) un html imbriqué complexe plus long mélangé avec du php. Deux options à considérer si vous êtes dans cette position sont les suivantes: encoder/décoder le balisage d'abord avec quelque chose comme [base64_encode][1]/ décoder (pas mal de performances), ou (et peut-être de préférence) être plus sélectif dans ce que vous passez via json, et générer à la place le balisage nécessaire côté client.

2
orionrush

Fait comme ça

Mettez d'abord tout votre contenu HTML dans un tableau, puis faites json_encode

$html_content="<p>hello this is sample text";
$json_array=array(

'content'=>50,
'html_content'=>$html_content
);
echo json_encode($json_array);
2
Lead Developer

En PHP:

$data = "<html>....";
exit(json_encode($data));

Ensuite, vous devez utiliser AJAX pour récupérer les données et faire ce que vous voulez avec elles. Je suggère d'utiliser JQuery: http://api.jquery.com/jQuery.getJSON/

1
Mārtiņš Briedis

Vous pouvez l'envoyer sous forme de chaîne, pourquoi pas. Mais vous vous trompez probablement un peu sur JSON ici car, si je comprends bien, le point est d'envoyer uniquement les données nécessaires et de les envelopper dans HTML sur le client.

1
Jan Zyka