Come per evidenziare modifiche / differenza di un paragrafo di testo dagli altri?
-
13-09-2019 - |
Domanda
E 'possibile evidenziare le modifiche in un paragrafo di testo dagli altri?
Per esempio, ci sono 3 campi di testo in un database. gli utenti non amministratori possono modificare il testo e inviare per l'approvazione. Quando l'amministratore esegue l'accesso, (s) può aprire la pagina di approvazioni e si vede il testo originale e testo utente presentate con modifiche. Di solito queste modifiche sono molto piccole in natura, come correzione ortografica o solo una delezione o l'aggiunta di una frase.
Può essere presentato in modo tale che le modifiche (dal testo originale) sono evidenziati in modo che gli utenti di amministrazione non devono controllare ogni campo e ogni linea prima di approvare esso?
Qualsiasi aiuto sarebbe apprezzato. Grazie.
Aggiornamento: Un po 'simile al codice del TortoiseSVN evidenziando le variazioni.
Soluzione
Opzioni:
- PHP Inline Diff (usa PEAR text-diff)
- PEAR Text_Diff
- Diff in PHP puro
- xdiff_string_diff ()
StackOverflow Archive:
Altri suggerimenti
Se si ha familiarità con gli strumenti di GNU / Linux, si potrebbe avere familiarità con lo strumento `diff'.
E qualcuno ha scritto un diff completamente funzionale per il confronto di file / stringhe in PHP.
È possibile trovare qui: php esempio diff .
Questo è un vecchio thread, ma ho pensato di catalogo i miei risultati.
Se si desidera utilizzare php crudo, questo è di gran lunga il più veloce, e la soluzione più semplice, più efficace che ho trovato: http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/
Da quello che posso dire, l'autore del codice di cui sopra sta usando un algoritmo descritto in questo articolo: http://www.codeproject.com/Articles/6943/A-Generic-Reusable-Diff-Algorithm-in-C-II
Descrizione di base di ciò che sta accadendo (tratto da l'articolo):
- Trova l'attuale sequenza corrispondente più lungo (LMS) di elementi.
- conservare questo LMS in un mucchio risultati.
- Processo di tutti i dati rimasti al di sopra dei LMS utilizzando la ricorsione.
- Processo di tutti i dati rimasti al di sotto LMS utilizzando la ricorsione.
Funziona come un fascino!
Non è sicuro, perché questi lunghi soluzioni ci sono. qui avevo trovato un facile per me.
string1 = "The quick brown fox jumps over the lazy dog.";
$string2 = "The quick brown albino fox jumps the groovy dog.";
$string1 = explode(" ", $string1);
$string2 = explode(" ", $string2);
$diff = array_intersect($string2, $string1);
$tmp = array();
foreach ($string2 as $k => $w) {
if ($diff[$k]==$w) {
$tmp[$k] = $w;
}
else {
$tmp[$k] = "<b>$w</b>";
}
}
$diff = array_diff($string1, $tmp);
foreach ($diff as $k => $w) {
$tmp[$k] .= " [<strike>$w</strike>]";
}
echo join (' ', $tmp);
ref. https://forums.phpfreaks.com / topic / 6525-how-do-i-evidenziazione-differenze-tra-strings /