2

両方ともHTMLを含むPHPの2つの文字列を比較しようとしています。(どちらもwysiwygエディターを介してデータベースに配置されます)。

私が取得したい結果は、どの単語が削除され、どの単語が追加されたかを確認することです。

これを行うために、私は次のようにこのコードを使用しています。

$old = "<p>Lorem ipsum is standard dummy text</p>";
$new = "<p>Lorem ipsum was standard dummy jibbrish</p>";
echo htmlDiff($old, $new);

これは完全に正常に機能します。ただし、などのタグを追加する<li>と、楽しみは終わります。

たとえば、次のような場合です。

$old = "<p>Lorem ipsum is standard dummy text. <ul><li>Lorem</li><li>Ipsum</li><li>Dolor</li></ul></p>";

$new = "<p>Lorem ipsum was standard dummy jibbrish. <ul><li>Lorem</li><li>Dolor</li></ul></p>";

echo htmlDiff($old, $new);

タグは最初のリストアイテムの<del>後に正しく追加されますが、削除されたリストアイテムは<del>タグの外側に配置されるため、削除されていないように見えます。

すべてのタグを削除することでこれを解決できましたが、両方の文字列のレイアウトを維持したいと思います。

ヘルプや提案は大歓迎です。

4

1 に答える 1

4

htmlDiff関数の次の代替手段のいずれかを試すことができます。

  1. このような結果を生成するPHPインラインdifミニライブラリ
  2. Horde_Text_Diffライブラリ
  3. xdiff拡張機能のxdiff_string_diff関数
于 2013-03-21T19:33:30.850 に答える