Intereting Posts

Как выделить изменения / различия в одном текстовом абзаце другого?

Можно ли выделить изменения в одном текстовом абзаце из другого?

Например, в базе данных имеется 3 текстовых поля. Пользователи, не являющиеся администраторами, могут редактировать текст и отправлять на утверждение. Когда администратор входит в систему, (ы) он может открыть страницу одобрения, и он показывает исходный текст и текст, представленный пользователем, с изменениями. Обычно эти модификации очень малы по своему характеру, такие как коррекция орфографии или просто удаление или добавление предложения.

Может ли он быть представлен таким образом, чтобы изменения (из исходного текста) были подсвечены так, что пользователям-администратору не нужно проверять каждое поле и каждую строку до их утверждения?

Любая помощь будет оценена по достоинству. Благодарю.

Обновлено: немного похоже на подсветку кода TortoiseSVN.

Опции:

  • PHP Inline Diff (использует PEAR text-diff)
  • PEAR Text_Diff
  • Diff in Pure PHP
  • xdiff_string_diff ()

Архив Stackoverflow:

  • Выделите разницу между двумя строками в PHP
  • Применить Diff в PHP
  • Нужна помощь Оптимизация функции разности строк php

Если вы знакомы с инструментами GNU / Linux, вы можете быть знакомы с инструментом `diff '.

И кто-то написал полностью функциональный diff для сравнения файлов / строк в php.

Вы можете найти его здесь: php diff example .

Это старая нить, но я думал, что буду каталогизировать мои выводы.

Если вы хотите использовать raw php, это, безусловно, самое простое, быстрое и эффективное решение, которое я нашел: http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/

Из того, что я могу сказать, автор вышеуказанного кода использует алгоритм, описанный в этой статье: http://www.codeproject.com/Articles/6943/A-Generic-Reusable-Diff-Algorithm-in-C-II

Основное описание происходящего (взято из статьи):

  • Найдите текущую самую длинную последовательность соответствия (LMS) элементов.
  • Сохраните эту LMS в кучу результатов.
  • Обработайте все данные, оставшиеся выше LMS, используя рекурсию.
  • Обработайте все данные, оставшиеся ниже LMS, используя рекурсию.

Работает как шарм!