par
naholyr » 29 mars 2007, 09:48
À ta place je reverrais la façon dont sont stockées les données :
1. Effectivement, il ne faut pas gérer les entités avant de stocker en bdd. Les données en BDD doivent être brutes, et c'est PHP qui doit (ou non) transformer le texte à volonté avant affichage. Les quotes ne doivent pas te poser de problème, ou alors c'est que tu n'as pas construit ta requête correctement et que tu as oublié d'utiliser mysql_real_escape_string() par exemple.
Je te défie, quelque soit le contenu de $variable, de trouver une erreur de syntaxe dans la requête suivante
$valeur_champ = mysql_real_escape_string($variable);
$query = "SELECT * FROM ma_table WHERE mon_champ = \"$valeur_champ\"";
Le texte stockée ne doit jamais être un problème n'oublie pas qu'il existe le champ blob capable de stocker du binaire. Donc Mysql n'a que faire que ton texte contienne des guillemets, des coeurs ou des accents, il le traite de façon brute. La seule source d'erreur causée par des quotes, ce sont des erreurs de syntaxe, et elles sont évitées par l'échappement de caractères.
2. Tu veux stocker du texte enrichi, et souhaite effectuer une recherche sur le texte hors enrichissement. C'est un cas typique de besoin d'indexation manuelle ! Si j'étais toi je créerais donc une table dédiée à la recherche contenant deux champs :
- une clé primaire correspondant à l'identifiant de la ligne indéxée
- un champ texte indexé pour la recherche rapide, contenant dans ton cas simplement le résultat de strip_tags sur ton texte enrichi.
En partant de ce principe tu peux même faire un traitement plus complet sur le texte indexé (virer les mots communs comme "le", "la", "les", gérer les pluriels, etc...).
Ceci t'imposera de faire deux requêtes lors des modifications (insertions et update), mais accélèrera et simplifiera ta recherche de façon très importante.