begin process at 2012 05 27 21:23:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > FORMATAGE AUTOMATIQUE D'UN TEXT EN FONCTION DE MOTS CLÉES

FORMATAGE AUTOMATIQUE D'UN TEXT EN FONCTION DE MOTS CLÉES


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caratère Classé sous :chaîne, caractères, formatage, colorisation Niveau :Débutant Date de création :11/05/2007 Date de mise à jour :11/05/2007 18:25:40 Vu :7 107

Auteur : _klesk

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Je cherchais depuis quelque temps un script me permettant de souligner, ou mettre en gras certain mot dans une chaîne de caractères, n'ayant pas trouver mon bonheur je m'y suis mis tout seul ;).

Ceci est ma première contribution, tout commentaires sera le bienvenu.

Source

  • <?
  • /*-----------------------------------*/
  • /*Fonction de formatage de caratères */
  • /*Par Klesk 11/05/2007 */
  • /* v1.0 */
  • /* Merci de laisser ce commentaire */
  • /*-----------------------------------*/
  • function autoformat($string, $word, $type="b")
  • {
  • //on sépare les mots clées
  • $tab1 = explode(' ',$word);
  • foreach($tab1 as $k => $v)
  • {
  • //pour chaques mots clées on remplace par le formatage choisi
  • $w[] = '<'.$type.'>'.$v.'</'.$type.'>';
  • $string = eregi_replace($tab1[$k], $w[$k], $string);
  • }
  • return $string;
  • }
  • ?>
  • */----------------------*/
  • */Version de kankrelune */
  • */inssensible a la casse*/
  • */Merci a lui */
  • */----------------------*/
  • <?
  • function kankrelune_autoformat($string, $word, $style = 'font-weight:bold;')
  • {
  • if(is_array($word))
  • {
  • $i = -1;
  • while(isset($word[++$i]))
  • $word[$i] = '~('.preg_quote($word[$i],'~').')~i';
  • }
  • else $word = '~('.preg_quote($word,'~').')~i';
  • return preg_replace( $word , '<span style="'.$style.'">$1</span>', $string);
  • }
  • ?>
<?
/*-----------------------------------*/
/*Fonction de formatage de caratères */
/*Par Klesk 11/05/2007               */
/* v1.0                              */
/* Merci de laisser ce commentaire   */
/*-----------------------------------*/

function autoformat($string, $word, $type="b")
	{
		//on sépare les mots clées
                $tab1 = explode(' ',$word);
		foreach($tab1 as $k => $v)
			{
                                //pour chaques mots clées on remplace par le formatage choisi
				$w[] = '<'.$type.'>'.$v.'</'.$type.'>';
				$string = eregi_replace($tab1[$k], $w[$k], $string);
			}
		return $string;
	}

?>
*/----------------------*/
*/Version de kankrelune */
*/inssensible a la casse*/
*/Merci a lui           */
*/----------------------*/
<?
function kankrelune_autoformat($string, $word, $style = 'font-weight:bold;')
{
    if(is_array($word))
    {
        $i = -1;
    
while(isset($word[++$i]))
            $word[$i] = '~('.preg_quote($word[$i],'~').')~i';
    }
    else $word = '~('.preg_quote($word,'~').')~i';

    return preg_replace( $word , '<span style="'.$style.'">$1</span>', $string);
}
?>

 Conclusion

//chaîne de caractères
$a = "CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR";
//mot clées séparé par un espace
$b ="CM 462 Asrock";

//affichage du résultat
echo autoformat($a,$b).'<br/>';

bug connus : ne gère pas la casse à l'affichage, mais en tient compte lors du traitement.

j'y travail, toute contribution sera la bienvenue.


 Historique

11 mai 2007 18:25:40 :
11/05/2007 Après recherche de kankrelune, voici une version insensible à la casse et respectant la casse elle même

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ENCODAGE UTF16 par foisse
GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU... par kylekatarnls
[PHP 5.1] CLASS STRING : NOUVEL EXEMPLE SUR LA SPL par malalam
CONVERSION DES CARACTÈRES SPÉCIAUX DANS UNE BASE DE DONNÉES ... par crocblanc
ORDRE DES LETTRES DANS UN MOT, ETUDE DE L'UNIVERSITÉ DE CAMB... par DarkM60

Commentaires et avis

Commentaire de garfield90 le 11/05/2007 00:55:08

un simple :

$myTerm pouvant etre : un tableau d'expression rationnelle / une expression rationelle complexe
preg_replace($myTerm,'<span class="highlight">$0</span>',$string) ;

je ne fais qu'une fois l'opération de mise en exergue (preg_replace), que toi tu le fais pour chaque terme ;)

perso, j'utiliserai plus la balise span avec une classe spécifique ce qui fait que pour changer le style, je modifie simplement mes CSS :)

a vérifier tout de meme car, j'ai fait ca a vu de nez

Commentaire de kankrelune le 11/05/2007 11:58:17

str_replace() !!! .. .

http://www.php.net/str_replace

====>

function autoformat($string, $word, $type = 'b')
{
    return str_replace( $word , <'.$type.'>'.$word.'</'.$type.'>'$string);
}

pourquoi faire compliqué quand on peut faire simple... .. .

@ tchaOo°

Commentaire de kankrelune le 11/05/2007 11:59:44

Merde oublié une virgule... .. .

function autoformat($string, $word, $type = 'b')
{
    return str_replace( $word , <'.$type.'>'.$word.'</'.$type.'>', $string);
}

@ tchaOo°

Commentaire de codefalse le 11/05/2007 12:48:56 administrateur CS

a noter qu'un <span style="font-weight:bold"> sera plus apprécié par les validateurs que le <b> (bon, apres ca rajoute des conditions pour si c'est italique, gras, etc)

Commentaire de _klesk le 11/05/2007 13:43:56

a kankrelune :

Le probleme avec t'a methode c'est que ca marche pas :

Ma methode :
//chaîne de caractères
$a = "CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR";
//mot clées séparé par un espace
$b ="CM 462 Asrock";

retourne : <b>CM</b> Sk <b>462</b> (AMD) - <b>Asrock</b> - K7NF2-RAID - SATA/DDR

la tienne :
retroune : CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR
rien

quand au balise je suis d'accord avec toutle monde, c'était m'a prochiane mise a jour

Commentaire de kankrelune le 11/05/2007 13:58:09

ouep dans ce cas...

function autoformat($string, $word, $style = 'font-weight:bold;')
{
    return str_replace( $word , '<span style="'.$style.'">'.$word.'</span>', $string);
}

Mais au final faire une fonction pour un str_replace() c'est plutôt inutile... ou alors on complique le truc genre on prend en compte les tableaux... genre... .. .

function autoformat($string, $word, $style = 'font-weight:bold;')
{
    if(is_array($word))
    {
     $i = -1;
     while(isset($word[++$i]))
     {
         if(isset($style[$i]) && !empty($style[$i]))
             $style[$i] = '<span style="'.$style[$i].'">'.$word[$i].'</span>';
         else
                $style[$i] = '<span style="font-weight:bold;">'.$word[$i].'</span>';
     }
    }
    else $style = ' <span style="'.$style.'">'.$word.'</span>';
    
    return str_replace( $word , $style, $string);
}

Mais je reste septique quand à l'utilité de déclarer ça en fonction... .. .

@ tchaOo°

Commentaire de kankrelune le 11/05/2007 14:07:55

à oki... c'est une liste de mots que tu veux mettre en gras... dans ce cas tu fais... .. .

function autoformat($string, $word, $style = 'font-weight:bold;')
{
    if(is_array($word))
    {
     $i = -1;
    
     if(is_array($style))
     {
         while(isset($word[++$i]))
         {
     if(isset($style[$i]) && !empty($style[$i]))
                    $style[$i] = '<span style="'.$style[$i].'">'.$word[$i].'</span>';
             else
            $style[$i] = '<span style="font-weight:bold;">'.$word[$i].'</span>';
         }
     }
     else
     {
         $tmp = $style;
         $style = array();
         while(isset($word[++$i]))
             $style[$i] = '<span style="'.$tmp.'">'.$word[$i].'</span>';
     }
    }
    else $style = ' <span style="'.$style.'">'.$word.'</span>';
    
    return str_replace( $word , $style, $string);
}

et ensuite tu fais...

echo autoformat('CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR', array('CM', '462', 'Asrock'));

@ tchaOo°

Commentaire de garfield90 le 11/05/2007 14:10:34

peut etre pour le mettre dans une classe de gestion de chaine de caractere qui après peut etre réutilisé.

Commentaire de _klesk le 11/05/2007 14:27:59

ca marche pas non plus quand tu met :

echo autoformat('CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR', array('cm', '462', 'Asrock'));

avec "cm" en minuscule, et le but de cette fonction était de mettre en gras les mot clé d'un listing de recherche MySQL.

Kankrelune, tu peu m'expliquer un peu t'a fonction ??

sinon, question annexe, peut on détecter si un lettre dans un mot est en majuscule ou pas ??

Commentaire de codefalse le 11/05/2007 15:03:00 administrateur CS

Dans quel usage tu veux detecter la casse d'un caractère ?
parce que pour l'exemple de Kankrelune, la fonction str_replace est sensible à la casse ("C" != "c"), donc si ton "CM" pose probleme face au "cm", alors tu peux utiliser la fonction str_ireplace, qui est la version insensible à la casse de str_replace() (voir la doc php si tu veux plus d'info). Et donc là, ton "CM" est remplacé.

Commentaire de _klesk le 11/05/2007 15:24:18

merci codefalse mais str_ireplace est dispo sous >PHP5 or je suis en PHP4 (et c'est pas possible de changer).

Non ce que je voulait c'est : dans ce cas, j'ai "CM", dans mon systeme de recherche je tape "cm" (avec eregi_replace, ca marche ;) ) alors j'ai bien "cm" en gras, mais en minuscule alors que dans la chaine d'origine il était en majuscule.

Je voudrait donc que lors de ma recherche il s'affiche tel qu'il etait dans la chaine même si mon mot clée est en minuscule.

Suis-je clair ??

Commentaire de kankrelune le 11/05/2007 15:43:45

Oui c'est clair... mais fallait le préciser... dans ce cas là si tu est sous php4 utilise plutot les expressions regulières... du genre... .. .

function autoformat($string, $word, $style = 'font-weight:bold;')
{
    if(is_array($word))
    {
        $i = -1;
    
while(isset($word[++$i]))
            $word[$i] = '~('.preg_quote($word[$i],'~').')~i';
    }
    else $word = '~('.preg_quote($word,'~').')~i';

    return preg_replace( $word , '<span style="'.$style.'">$1</span>', $string);
}

@ tchaOo°

Commentaire de codefalse le 11/05/2007 15:45:48 administrateur CS

Autant pour moi a propos de php4 :/ :p

Une méthode peut-être un peu bourine, serait de :
_ Sauvegarder ta chaine dans une variable
_ faire le ereg replace sur ta chaine mise et des mot à remplacer le tout en miniscule
_ puis explode la variable de la chaine d'origine
_ et tu remplace tout les termes retournés de la fonction d'origine, mis en miniature, par les mêmes valeurs, mais avec la casse d'origine.
_ tu retourne le tout

Ne connaissant pas de fonction directe qui peux remplacer en étant insensible à la casse et en gardant la casse d'origine, c'est comme ca que je le verrai. Apres, ya ptete mieux (et vu comme c'est assez lourd je trouve, il doit y avoir mieux) ... mais c'est une solution ! :)

Commentaire de codefalse le 11/05/2007 15:48:48 administrateur CS

ok, je ne connaissais pas la fonction preg_quote .. en effet elle est tres utile :)

Commentaire de _klesk le 11/05/2007 18:22:10

impec merci kankrelune ca marche au poil.
j'ai pas tout compris mais je vais decortiquer tous ça.

si tu le permet je rajoute t'a version.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

format chaîne de caractères [ par mark01 ] Bonjour à tous,voiçi mon problème :J'ai une base de données PostgreSQL. Une appli php. Dans une des tables j'ai un attribut de type chaîne de caractèr découpage chaîne de caractère [ par suethi75 ] Bonsoir, Je voudrais découper des chaîne de caractère dont je ne connais pas forcément la taille. Je sais juste que je dois prendre les 2 ou 3 premier extraire chaîne caractères [ par eax ] salutj'ai un petit pb de traitement de chaines de caractères :j'ai une variable avec du contenu dedans (je ne sais pas ce qu'il y a exactement dedans Regex et caractères spéciaux [ par Totofweb ] BonjourJ'ai une variable, $texte. Dans celle-ci, je dois tester si elle contient [couleur=#123456] où 123465 est un nombre entier de 6 chiffres.J'ai e Conversion de caractères issus de dbase.comment faire? [ par asterixobelix ] &lt;?php$base="eleves.dbf";$dbh =dbase_open($base,0);$nb_eleves=dbase_numrecords($dbh);print("$nb_eleves &lt;BR&gt;");$nb_champs=dbase_numfields($dbh) Comment rechercher un mot dans une chaine de caractères ? [ par Drazounet ] Bonjours à tous,Je suis en train de programmer un forum en php et maintenant je suis en train de lui ajouter une section "recherche" afin de trouver p combien de caractères il y a dans un longtext [ par perig ] BonjoursBon voilà ma question du jour et la suivante :Savez vous combien de caractères il y a dans un longtext pour une base mysql.merci---Perig---Po Formatage de chiffre [ par akela13th ] Akela13thBonjour à tous, Je suis à la recherche d'une fonction PHP qui me permettrait de coder un chiffre sur 2 positions. Exemple : '0' deviendrait ' Formatage du code source php [ par Mikelepsycopat ] Bonjourje voudrais savoir si un programe exite pour Formater du code php.Je sais Que dreamwever le fais pour le code htm mais ils ne le fais pas pour Découpage de chaine de caractères [ par DJDX ] Mon problème, est le suivant... Dans ma base de donnée MySQL, j'ai des liens sous le format http://www.blabla.com*blab1/bla2. J'aimerais savoir commen


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales