Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Chaine de caracteres avec condition

2 réponses
Avatar
ADB
Si j'arrive à comprendre à peu près comment fonctionne l'ereg_replace,
je ne comprends pas où placer les groupes de caractères du profil.

J'ai le bout de code suivant:

$texte=eregi_replace(
$row_liens["titre"],
'<a
href="article.php3?id_article='.$row_liens["id_article"].'">'.$row_liens["titre"].'</a>',
$texte);

L'objectif est de tirer de la base un mot, ou groupe de mots, de le
comparer à un texte, et d'ajouter au mot, ou groupe de mot, trouvé dans
ce texte l'url correspondant à celui de la base.
- Il faut que le mot trouvé dans le texte soit un mot entier, et non
partie de mot.
Actuellement : si j'ai Ist (venant de la base) à retrouver dans un texte
où il y a "touriste", j'obtiens un "tour<a href...>ist</a>e" ce qui ne
me convient évidemment pas.
- il faut que la correspondance puisse se faire également si le mot du
texte est suivi d'un caractère de ponctuation ou précédé d'une apostrophe.
Exemple : le mot à retrouver est "île de Hvar". Je veux pouvoir le
retrouver dans un texte où il y aurait "d'île de Hvar", "Ile de Hvar",
"île de Hvar,", "île de Hvar;", etc.

J'ai bien essayé de comprendre la doc mais je n'y parviens pas.

L'ensemble du code est le suivant:
function liens_auto($texte) {
$query_liens_auto = "SELECT id_article, titre FROM spip_articles as
liens WHERE statut='publie'";
$result_liens_auto = spip_query($query_liens_auto);
while($row_liens = mysql_fetch_array($result_liens_auto))
{
$texte=eregi_replace(
$row_liens["titre"],
'<a
href="article.php3?id_article='.$row_liens["id_article"].'">'.$row_liens["titre"].'</a>',
$texte
);
}

Merci infiniment
ADB

2 réponses

Avatar
CrazyCat
ADB wrote:

L'ensemble du code est le suivant:
function liens_auto($texte) {
$query_liens_auto = "SELECT id_article, titre FROM spip_articles as
liens WHERE statut='publie'";
$result_liens_auto = spip_query($query_liens_auto);
while($row_liens = mysql_fetch_array($result_liens_auto))
{
$texte=eregi_replace(
$row_liens["titre"],
'<a
href="article.php3?id_article='.$row_liens["id_article"].'">'.$row_liens["titre"].'</a>',
$texte
);
}



Le problème vient du fait que tu utilises un outil de remplacement de
manière bête et méchante (en toute amitié), c'est à dire que ton système
agit ainsi:
remplace toute occurence de $row_liens["titre"] par un lien formaté dans
la chaine $texte.
Donc, tu ne travailles que sur des chaines de caractères.
Or, eregi_replace permet d'utiliser les expressions régulières, donc il
faudrait que tu ne remplace non pas $row_liens["titre"] mais quelque
chose comme "début de mot + $row_liens["titre"] + fin de mot"
ce qui doit donner quelque chose comme 'b'.$row_liens["titre"].'b'

Je ne suis pas bien sur que le premier b fonctionnera si ton mot-clé
est en début de texte, mais il faudra un peu que tu cherches dans les
expressions régulières.


--
Tout sur les eggdrops
http://www.c-p-f.org
ML @

Avatar
ADB
ADB wrote:

L'ensemble du code est le suivant:
function liens_auto($texte) {
$query_liens_auto = "SELECT id_article, titre FROM spip_articles as
liens WHERE statut='publie'";
$result_liens_auto = spip_query($query_liens_auto);
while($row_liens = mysql_fetch_array($result_liens_auto))
{
$texte=eregi_replace(
$row_liens["titre"],
'<a
href="article.php3?id_article='.$row_liens["id_article"].'">'.$row_liens["titre"].'</a>',

$texte
);
}



Le problème vient du fait que tu utilises un outil de remplacement de
manière bête et méchante (en toute amitié), c'est à dire que ton système
agit ainsi:
remplace toute occurence de $row_liens["titre"] par un lien formaté dans
la chaine $texte.
Donc, tu ne travailles que sur des chaines de caractères.
Or, eregi_replace permet d'utiliser les expressions régulières, donc il
faudrait que tu ne remplace non pas $row_liens["titre"] mais quelque
chose comme "début de mot + $row_liens["titre"] + fin de mot"
ce qui doit donner quelque chose comme 'b'.$row_liens["titre"].'b'

Je ne suis pas bien sur que le premier b fonctionnera si ton mot-clé
est en début de texte, mais il faudra un peu que tu cherches dans les
expressions régulières.


Merci de ta rééponse. Je vais fouiller et tâcher de comprendre.

ADB