Bonjour à tous,

J'ai une fonction qui compare deux textes (mot à mot), mais un point d'interrogation semble poser problème, du fait que ce soit un "mot d'une seule lettre" peut-être.

Voici le code complet (ça pourra ptet servir à d'autres ) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
<?php
function diff($id1, $id2)
  {
 
  $contenu1 = htmlspecialchars($id1);
  $explode1 = explode("\n", $contenu1);
 
  $contenu2 = htmlspecialchars($id2);
  $explode2 = explode("\n", $contenu2);
 
  $compte1 = count($explode1);
  $compte2 = count($explode2);
  if ($compte1 < $compte2)
    {
    $comptebase = $compte2;
    $manquant = $compte2-$compte1;
    for ($i=0;$i<$manquant;$i++)
      {
      array_push($explode1, "");
      }
    }
  elseif ($compte2 < $compte1)
    {
    $comptebase = $compte1;
    $manquant = $compte1-$compte2;
    for ($i=0;$i<$manquant;$i++)
      {
      array_push($explode2, "");
      }
    }
  else { $comptebase = $compte1; }
 
  echo "<fieldset><legend>Effacé entre la nouvelle et l'ancienne version :</legend>";
 
  $texte = "";
  for ($i=0; $i<$comptebase; $i++)
    {
    $exp = explode(" ", $explode1[$i]);
    $exl = explode(" ", $explode2[$i]);
    foreach ($exp as $clep => $motp)
      {
      $motp = str_replace("/", "\/", $motp);
      $motp = str_replace("[", "\[", $motp);
 
      if (preg_grep("/(\[)?(http:\/\/)?".$motp."(\])?/i", $exl))
        {
        $texte .= $motp." ";
        }
      else
        {
        $texte .= "<s>".$motp."</s> ";
        }
      }
    }
  $texte = str_replace("\/", "/", $texte);
  $texte = str_replace("\[", "[", $texte);
  echo nl2br($texte);
 
  echo "</fieldset><br>";
  echo "<fieldset><legend>Ajouté entre la nouvelle et l'ancienne version</legend>";
  $texte = "";
  for ($i=0; $i<$comptebase; $i++)
    {
    $exp = explode(" ", $explode1[$i]);
    $exl = explode(" ", $explode2[$i]);
    foreach ($exl as $clel => $motl)
      {
      $motl = str_replace("/", "\/", $motl);
      $motl = str_replace("[", "\[", $motl);
//      $motl = str_replace("?", "\?", $motl);
 
      if (preg_grep("/".$motl."/i", $explode1))
        {
        $texte .= $motl." ";
        }
      else
        {
        $texte .= "<b>".$motl."</b> ";
        }
      }
    }
  $texte = str_replace("\/", "/", $texte);
  $texte = str_replace("\[", "[", $texte);
  echo nl2br($texte);
 
  echo "</fieldset>";
 
  }
 
  $texte1="
  Salut ça va ! ?
  Moi je suis content d'être là, pas vous ?
  Youpi ya !";
  $texte2="
  Salut ça va ?
  Moi je ne suis pas content d'être là, pas vous ?";
  diff($texte1,$texte2);
?>
Vous pouvez tester le code, et allez voir l'erreur "Warning". Cette fonction ne nécessite aucune fonction externe, tout est là.

Merci d'avance pour votre aide !