Le texte est stocké doublement dans la base de données, le texte formatté que l’utilisateur entre bien sûr, et une version nettoyée pour les recherches.
Bien sûr j’aurais pu faire un système d’indexation imitant les tags mais je trouve ça fastidieux et puis les tags sont là. Donc il faut la recherche sur le texte via mysql. Du coup le texte entrée doit être débarrassé des balises html, et puis tant qu’on y est de la ponctuation et de tous les signes non alphanumériques et des chiffres (sans garder non plus tous les nombres au sens large unicode du terme mais ce serait éventuellement modifiable pour un portage en chinois ? maybe).
bref ça donne ce bout de code il est vrai carrément trivial mais qui dépannera peut-être quelqu’un de pressé :
function bareText($text) {
// les majuscules/minuscules ne serviront pas :
// > tout en bas de casse
$newtext = strtolower($text);
// on se débarrasse aussi des retours à la ligne éventuels
// en les remplaçants d'abord par du html
$newtext = nl2br($newtext);
// puis on dégage tout ce qui est balise html
// noter qu'on remplace par un espace pas par rien
$newtext = preg_replace('/<([^<>]*)?>/uims',' ', $newtext);
// ceci fait on retraduit les entités en texte régulier
$newtext = html_entity_decode($newtext,ENT_QUOTES,"UTF-8");
// avant de supprimer tous les caractères non alphanumériques
// c'est à dire pas des lettres (p{L}) ni des chiffres ([0-9])
$newtext = preg_replace('/[^\pL0-9]/uims',' ',$newtext);
// comme on a rajouté plein d'espaces
// on les condense :
$newtext = preg_replace('/\s+/uims',' ', $newtext);
// du blanc au début ou à la fin ? à dégager
$newtext = trim($newtext);
// c'est prêt !
return $newtext;
}
Pourquoi remplacer par des espaces quand on pourrait remplacer par rien en supprimant ? Hé bien par exemple si on a :
<p>Paragraphe 1</p><p>Paragraphe 2<br />peut-être</p>
qui devrait s’afficher :
Paragraphe 1
Paragraphe 2
peut-être
il serait “nettoyé” en : Paragraphe 1Paragraphe2peutêtre
Ce qui serait loin de l’objectif ! Alors que avec la fonction ci-dessus on obtient bien :
paragraphe 1 paragraphe 2 peut être
bien plus approprié pour le futur