141 votes

Mettre en évidence la différence entre deux chaînes en PHP

Quelle est la manière la plus simple de mettre en évidence la différence entre deux chaînes en PHP?

Je pense aux lignes de la page de l'historique de modification du débordement de la pile, où le nouveau texte est en vert et le texte supprimé en rouge. Si des fonctions ou des classes pré-écrites sont disponibles, ce serait l'idéal.

Merci d'avance.

80voto

R. Hill Points 1877

Vient d'écrire une classe pour calculer la plus petite (pour ne pas être pris à la lettre) nombre de modifications à la transformation d'une chaîne dans une autre chaîne de caractères:

http://www.raymondhill.net/finediff/

Il a une fonction statique pour rendre une version HTML de la diff.

C'est une première version, et susceptible d'être amélioré, mais il fonctionne très bien maintenant, je suis donc jeter là-bas au cas où quelqu'un a besoin pour générer un compact diff de manière efficace, comme j'en avais besoin.

Edit: C'est sur Github maintenant: https://github.com/gorhill/PHP-FineDiff

45voto

M.N Points 4106

Vous pouvez utiliser le package PHP Inline-Diff . Il convient à vos besoins et est également personnalisable.

Il est également sous licence GPL, alors profitez-en!

26voto

Softy Points 363

24voto

Wickethewok Points 2212

Si vous voulez une bibliothèque robuste, Text_Diff (un package PEAR) semble être très bon. Il a des fonctionnalités assez cool.

6voto

Gordon Points 156415

Il y a aussi une extension PECL pour xdiff:

En particulier:

Exemple de Manuel PHP:

<?php
$old_article = file_get_contents('./old_article.txt');
$new_article = $_POST['article'];

$diff = xdiff_string_diff($old_article, $new_article, 1);
if (is_string($diff)) {
    echo "Differences between two articles:\n";
    echo $diff;
}

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