PHP: problème de balisage HTML lors de l'affichage des balises HTML découpées

StackOverflow https://stackoverflow.com/questions/801017

  •  03-07-2019
  •  | 
  •  

Question

J'utilise un contrôle de zone Richtext pour publier des données sur une page. et je sauvegarde les données dans ma table de base de données avec la balise HTML Ex: c’est < b > mon gras < / b > texte

J'affiche les 50 premiers caractères de cette colonne dans une autre page. Maintenant, quand je sauve, si je sauve une phrase (avec plus de 50 caractères) avec le tag gras appliqué et dans mon autre page quand je coupe ça (pour prendre les 50 premiers caractères), je perdrais le tag b de fermeture (& Lt ; / b >) .Alors le gras s’applique au reste de mon contenu dans cette page.

Comment puis-je résoudre ce problème? Comment puis-je vérifier que tous les tags ouverts ne sont pas fermés? y at-il un moyen facile de faire cela en PHP. Existe-t-il une fonction pour supprimer la totalité de mes balises HTML / balises HTML et me donner la phrase sous forme de texte brut?

Était-ce utile?

La solution

http://php.net/strip_tags

la fonction strip_tags supprimera toutes les balises que vous pourriez avoir.

Autres conseils

Oui

$textWithoutTags = strip_tags($html);

J'utilise généralement HTML :: Truncate pour cela. Bien sûr, étant un module Perl, vous ne pourrez pas l’utiliser directement dans votre PHP - mais le code source montre une approche qui marche (qui consiste à utiliser un analyseur HTML).

Une autre approche consiste peut-être à tronquer comme vous le faites actuellement, puis à essayer de la réparer en utilisant Bien rangé .

Si vous souhaitez conserver les balises HTML, mais les fermer correctement, voir PHP: tronquer le code HTML en ignorant les balises . Sinon, lisez ce qui suit:

strip_tags supprimera les balises HTML, mais pas les entités HTML (telles que &amp;), qui pourraient toujours provoquer des problèmes si tronqué.

Pour gérer également les entités, vous pouvez utiliser html_entity_decode pour décoder les entités après le retrait des balises, puis le rognage, puis réencodez finalement les entités avec htmlspecialchars :

$text = "1 &lt; 2\n";
print $text;
print htmlspecialchars(substr(html_entity_decode(strip_tags($text), ENT_QUOTES), 0, 3));

(Notez l'utilisation de ENT_QUOTES pour convertir toutes les entités.)

Résultat:

1 < 2
1 <

Note de bas de page: Ceci ne fonctionne que pour les entités pouvant être décodées en ISO-8859-1. Si vous avez besoin de support pour les caractères internationaux, vous devriez déjà travailler avec des chaînes codées UTF-8, et vous devez simplement spécifier cela dans l'appel à html_entity_decode .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top