ukulele fr en coulisses

les rouages techniques de ukulele.fr

Du nettoyage du texte juillet 27, 2009

Filed under: php — bertrand - kdus @ 11:34
Tags: , ,

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

 

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s

 
Suivre

Get every new post delivered to your Inbox.