[PHP] - Problème de génération de liens dynamiques - Les ' posent des soucis

Salut à tous.

Premièrement je ne sais pas trop quelle peut être la cause du problème, car le code n’est pas de moi et bien que j’arrive à saisir le principe, c’est passablement obscur sur comment ca fait tout ca :slight_smile:

On a nos articles dans la base de données, et via une réindexation on stocke pour chaque article la liste des autres articles contenu dans le texte de l’article et vers lesquels il faut faire des liens (enfin je crois que c’est ca que ca fait).

Exemple ici : http://www.archives-alliance.com/endor-article-53.html

Là où j’ai un soucis, quand la chaine de caractère contient un ', ca ne fonctionne pas correctement… les liens créés ne contiennent alors pas l’ID de l’article vers lequel rediriger. Sur mon exemple “bataille d’endor” est foiré par exemple :frowning:

Voici le code, je crois, en charge de ce morceau…

foreach ($keyword as $nolink){
  if (!empty($nolink) or $nolink!=""){
    $nolink = str_replace("'", "' ", "$nolink");
    $sresult = mysql_query("select id FROM encyclopedie WHERE 1 and acro like \"$nolink\" or taltern like \"%;$nolink%\"");
    $srow = mysql_fetch_object($sresult);
    $sid = $srow->id;
    $acro2 = sys_texte_basique($nolink);
    $link = ' <a href="'.$acro2.'-article-'.$sid.'.html" title="'.$nolink.'">'.$nolink.'</a> ';
    $valeur = eregi_replace(" ".$nolink." ", "$link", "$valeur");
  }
}

Une idée ?

Merci par avance :wink:

pour tout ça, j’ai une méthode simple.


$link ="<a href=\"".$acro2."-article-".$sid.".html?#34;\" title=\"".$nolink."\">".$nolink."</a>";

:neutre:

et puis faudrait songer a utiliser url_encode sur tes variables :wink:

Hum je crois que j’ai corrigé par erreur le blem : j’ai inversé deux lignes ^^

$nolink = str_replace("’", “’ “, “$nolink”);
$sresult = mysql_query(“select id FROM encyclopedie WHERE 1 and acro like \”$nolink\” or taltern like \”%;$nolink%\"");

Je crois que le str replace fait que la requête SQL derrière ne retournait pas l’id car la recherche était “fausse”. En revanche j’ignore si ca pourrait avoir des effets secondaires…

N’empêche que le WHERE 1 AND c’est bof, et que le $nolink devrait passer à mysql_real_escape_string!

Spa de moi le code, j’évites de toucher plus que nécessaire pour pas tout casser ^^ le WHERE 1 je vais le virer, je vois pas à quoi il sert de toute manière !