Подтвердить что ты не робот

Существуют ли библиотеки для отображения различий между двумя веб-страницами?

Я ищу библиотеку на любом языке - желательно PHP, но это отображает разницу между двумя веб-страницами. Различия могут отображаться бок о бок, все в одном документе или любым другим творческим способом.

Примеры того, как это будет выглядеть:

Я НЕ Ищем сырой код, отличный от этого: http://thinkingphp.org/img/code_coverage_html_diff_view.png. Я НЕ хочу показать разницу между двумя наборами HTML. Я хочу показать различия в визуализированной форме WYSIWYG.

Каждое решение, которое я пробовал, страдает одной или несколькими из следующих проблем:

  • Если я изменю атрибут элемента (например, измените [table border="1"] на [table border="2"]), тогда у меня будет дополнительный тег таблицы на выходе (например, [table border="1"][table border="1"][tr][td]...). И один тег таблицы будет иметь тег del, а другой будет иметь тег ins вокруг него, и это, очевидно, вызовет проблемы.
  • Если я изменяю [html][body][b]some content here[/b][/body][/html] на [html][body][i]some other content here[/i][/body][/html], тогда он выглядит как [html][body][b][del]original[/del][i][ins]new[/ins] content here[/b][/i][/body][/html]

Я ищу идеи из коробки. Любые идеи приветствуются.

4b9b3361

Ответ 1

Daisy Diff - отличная программа diff, разработанная в java, которая делает очень приличную работу при сравнении HTML-кода.

У него даже есть возможность пойти влево и вправо, чтобы пересмотреть сделанные изменения. Daisy Diff настолько мощна, что может обрабатывать изменения атрибутов внутри тегов, он скажет вам, было ли изменено изображение или была удалена или обновлена ​​ссылка.

Проект с открытым исходным кодом может быть загружен из Google: http://code.google.com/p/daisydiff/

Я знаю, что это не php, но это может быть ваш лучший шанс иметь приличный html diff. Используйте системные или shell_exec php методы для выполнения такой строки:


java -jar daisydiff.jar http://myPageOld.html    html://myPageNew.html   
--file=result.html 
--output=html 
--type=html

результат вашего diff пойдет в файл result.html. Я рекомендую вам его использовать!

Ответ 2

Отношение между html-кодом и отображаемой страницей недостаточно для этого, чтобы работать в общем случае. Вы должны быть более конкретными для решения проблемы.

  • Изменения css влияют на это
  • Вы хотите обработать недопустимый html
  • это проще для конкретного браузера (версии)

Ответ 3

Одна из настроек, которые вам нравятся, - это скриншот со страницы Википедии. Если это тот тип механизма, который вы ищете, и он должен быть в PHP, то почему бы не скачать MediaWiki и посмотрите на часть своего кода, ответственного за генерацию diff?

Вероятно, это самая близкая вещь, которую вы найдете в общем, не требующем установки, готовом решении. (По крайней мере, это самая близкая вещь, о которой я знаю).

Ответ 4

Мое решение этой проблемы требует Microsoft Word. Хотя подобные вещи могут быть возможны и с другими приложениями для инструментария производительности.

Если вы открываете HTML-страницы в Word, они преобразуют их в обычные документы и поэтому их можно легко визуально сравнивать. Поэтому в диалоговом окне Review..Compare вы можете просто указать пути HTML как имена файлов и открыть их, как если бы они были документами Word. Это хорошая идея отключить опцию "сравнить форматирование" в этом диалоговом окне, чтобы избежать множества странных ложных срабатываний. После сопоставления документов вы можете отступать и переходить через изменения с помощью кнопок "Предыдущий" и "Следующий" на ленте "Обзор". Изменяет ленту.

Мне пришлось сравнить довольно много документов, поэтому я написал код для этого.

Sub CompareHTML()
Dim doc1 As Document, doc2 As Document
    Set doc1 = Documents.Open("http://mydevsite.com/reports/1717")
    Set doc2 = Documents.Open("http://mylivesite.com/reports/1717")


    Application.CompareDocuments OriginalDocument:=doc1, _
        RevisedDocument:=doc2, Destination:=wdCompareDestinationNew, _
         Granularity:=wdGranularityWordLevel, CompareFormatting:=False, _
        CompareCaseChanges:=True, CompareWhitespace:=False, CompareTables:=True, _
        CompareHeaders:=True, CompareFootnotes:=True, CompareTextboxes:=True, _
        CompareFields:=True, CompareComments:=True, CompareMoves:=True, _
        RevisedAuthor:="Author", IgnoreAllComparisonWarnings:=False

        doc1.Close
        doc2.Close
End Sub