2 html metin blokları bir karşılaştırma göstermek için nasıl

6 Cevap php

İki metin bloklarını birleştirme ve ardından sonraki ilave veya bir sürüm çıkarıldı ne vurgulamak - html etiketleri ile iki metin blokları alır ve bir karşılaştırma işlemek gerekir.

Ben başarıyla plain metin karşılaştırmalar işlemek için PEAR Text_Diff sınıfını kullandık, ama ben html etiketleri ile metin atmaya çalıştığınızda, o ÇİRKİN alır. Çünkü kelime ve karakter-tabanlı sınıfı kullanır algoritmalar karşılaştırma arasında html etiketleri kırık olsun ve ben <p><span class="new"> </</span>p> gibi çirkin şeylerle sonuna kadar. Bu html katlediyor.

Orijinal geçerli html biçimlendirme koruyarak bir metin karşılaştırma oluşturmak için bir yolu var mı?

Yardımlarınız için teşekkürler. Ben hafta boyunca bu üzerinde çalışıyoruz: [

Bu benim düşünebildiğim en iyi çözümdür: primative markdown bu tür karşılaştırma işlemek, elma logosu gibi 1 özel standart olmayan bir karakter (opt vardiya k) html etiketinin her türü yerini bulmak /, daha sonra dönmek non- geri etiketleri içine standart karakterler. Herhangi bir görüş?

6 Cevap

Sorun Fark programı atom belirteçleri ziyade bireysel karakterler olarak mevcut HTML etiketlerini tedavi gerektiğini gibi görünüyor.

Senin motoru, kelime sınırları üzerinde çalışmaya kendini sınırlamak bunu tanır ve tek bir "kelime" gibi HTML etiketlerini davranır yani kelime sınırlarını belirleyen işlevi geçersiz görmek için yeteneği varsa.

Ayrıca diyorsun gibi yapmak ve ayrı bir kullanılmayan Unicode değeri (I kullanabileceğiniz bazı kullanıcı tanımlı aralıkları vardır sanırım) her yerini ayrı HTML etiketleri bir arama sözlüğü oluşturabilirsiniz. Bunu yaparsanız Unicode karakter simgeleştiricisine o kelimenin parçası haline gelecektir çünkü, bir önceki veya bir sonraki kelime bir değişiklik vardı sanki Ancak, biçimlendirme herhangi bir değişiklik tutulacaktır. Lütfen belirteç Unicode her karakter önce ve sonra bir boşluk ekleyerek HTML etiketi değişiklikleri düz metin değişikliklerden ayrı tutmak istiyorum.

Bunu yapmak için tasarlanmış sanki basit Diff, Paul Butler tarafından, görünüyor tam olarak ne gerekiyor: http://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php

Notice in his php code that there's an html wrapper: htmlDiff($old, $new)

(Onun blog yazısı üzerine: http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/

Önce bu fonksiyonu sayesinde HTML bloklar çalıştırmayı deneyin:

htmlentities();

Bu sizin tüm dönüştürmek "<" 'nin ve ">"' nin karşılık gelen kodlarıyla içine, belki sorunu gidermekle gerekir.

//Example:
$html_1 = "<html><head></head><body>Something</body></html>"
$html_2 = "<html><head></head><body><p id='abc'>Something Else</p></body></html>"

//Below code taken from http://www.go4expert.com/forums/showthread.php?t=4189.
//Not sure if/how it works exactly

$diff = &new Text_Diff(htmlentities($html_1), htmlentities($html_2));
$renderer = &new Text_Diff_Renderer();
echo $renderer->render($diff);

Ne ilk, her blokta bir html tidier / biçimlendirici kullanmaya ne dersiniz? Bu fark yutmak daha kolay bulabileceğiniz bir standart "yapı" yaratacak

Benim kendi cevap bir kopyası here.


Ne DaisyDiff (Java ve PHP vesions mevcut) ilgilidir.

Aşağıdaki özellikler gerçekten güzel:

  • "Vahşi" bulunabilir kötü oluşturulan HTML ile çalışır.
  • Diffing XML ağaç farklıdır daha HTML daha uzmanlaşmış. Bir metin düğümünün kısmını değiştirme bütün düğüm değiştirilmesine neden olmaz.
  • Varsayılan görsel fark ek olarak, HTML kaynak tutarlı diffed edilebilir.
  • Değişikliklerin açıklamalarını anlamak kolay sağlar.
  • Varsayılan GUI klavye kısayolları ve bağlantılar aracılığıyla değişiklikler kolay tarama sağlar.

Ben hiç kimse HTMLDiff MediaWiki en Visual Diff dayalı belirtilen merak ediyorum. Bir deneyin, senin gibi bir şey arıyor ve oldukça kullanışlı bulunmuştur.