phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  Chaînes


Afficher plusieurs espaces sans remplacer[30-08-2002]
Posté par Hell

Voici une manière très simple d'afficher une chaîne qui contient plus d'un espace collé.

Prenons ici pour exemple l'affichage de la variable $chaine :

$chaine = "Voici une chaine avec plusieurs espaces collés ."; //ici nous avons deux espaces entre chaque mots et environ sept entre le "." et le dernier mot.

<?
echo "Chaine sans changement: $chaine";
echo
"Chaine avec changement: <font><pre><xmp>$chaine</pre></xmp></font>";
?>

Bien-sûr, c'est du HTML et non du PHP, mais c'est toujours plus rapide qu'un str_replace. On se sert des balises <font></font> pour que le texte soient d'une grosseur standard, sinon il peut arrivé que celui-ci soie assez petit.

<pre></pre> est utilisé pour dire que le texte entré entre les deux balises est déjà préformatté.

<xmp></xmp> est l'ancêtre de <pre></pre>, n'existe plus depuis html 4.0, mais il existe encore quelques navigateurs qui ne sont pas tout à fait à jour.

Vous aurez aussi remarqué que les balises entrées entre <pre></pre> s'affiche comme
du texte et que les retours de lignes sont automatiquement appliqués, c'est donc un
htmlspecialchars() en moins ainsi qu'un nl2br().

[1 commentaire]

Caractères interdits[19-06-2002]
Posté par Bruno Boccara

Fonction permettant de reformater une chaîne de caractères contenant des caractères interdits pour les noms de fichiers ou répertoires Windows.

<?php                
function CheckValidName($str1)
{
    
$invalide = array('\\','/',':','*','?','"','<','>','|');
    
$i=0;
    while (
$invalide[$i])
    {
        
$str1 = strtr($str1, $invalide[$i], " ");
        
$i++;
    }
                
    return
$str1;
}


Coupure (nette) d'une phrase[10-04-2002]
Posté par Dj ThuG

L'astuce `Coupure de texte sans coupure de mot` ne fonctionnant pas comme je le souhaitais (voir pas du tout), j'ai fait une fonction fonctionnant beaucoup mieux.

<?php

function cut_sentence($Texte,$nbcar=0)
{
    if (
strlen($Texte) > $nbcar && (0!=$nbcar) )
    {
        
$Tmp_Tb = explode( ' ', $Texte );
        
$Tmp_Count = 0;
        
$Tmp_O = '';

        while( list(,
$v) = each($Tmp_Tb) )
        {
            if (
strlen($Tmp_O) >= $nbcar ) break;
            
$Tmp_O .= $v.' ';
        }
        
$Tmp_O = substr( $Tmp_O, 0, strlen($Tmp_O)-1 );
        if (
count($Tmp_Tb) > 1 )
        
$Tmp_O .= '...';

    }
    else
        
$Tmp_O = $Texte;

    return
$Tmp_O;
}

?>


[1 commentaire]

Table ASCII[10-04-2002]
Posté par Semhur

Une table ASCII pour connaître la valeur des caractères.

3 colonnes :
- la valeur décimale du caractère
- le caractère tel qu'il est affiché à l'écran
- le nom (pour les caractères de contrôle) ou l'équivalent HTML du caractère

<table cellspacing=10>
<tr>
<?
$tab
= array('NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL',
             
'BS', 'HT&nbsp;(\t)','LF&nbsp;(\n)', 'VT', 'FF',
            
'CR&nbsp;(\r)', 'SO', 'SI', 'DLE', 'DC1', 'DC2', 'DC3',
            
'DC4', 'NAK', 'SYN', 'ETB', 'CAN', 'EM', 'SUB', 'ESC',
            
'FS', 'GS', 'RSD', 'US', 'SP');

for (
$i = 0; $i < 256; $i++)
{
    
$couleur = $i&1 ? "#FFFFFF" : "#B8C8FE";
    
// récupére le code html du caractère
    
$html = htmlentities(chr($i),'ENT_QUOTES');
    
$html = str_replace('&','&<NOBR>',$html);
    
$html = (chr($i)==$html) ? $tab[$i] : $html;
    if (
$i%32==0) echo '
      <td bgcolor="'
.$couleur.'">
      <table bgcolor="#FFFFFF" cellpadding="2" border="0" width="130">'
;
    echo
'
        <tr bgcolor="'
.$couleur.'">
          <td width=30>'
.$i.' </td>
          <td>'
.chr($i).'&nbsp;</td>
          <td>'
.$html.'&nbsp;</td>
        </tr>'
;
    if (
$i%32==31) echo '
      </table>
      </td>'
;
}
?>
</tr>
</table>


Tronçonnage d'un texte[06-03-2002]
Posté par Japy

<?
function tronque($com, $nb)
{
   
// partition de la chaine $com en tronçon de $nb caractères

   
$longueur = strlen($com);
   
$posA = 0;
   
$posB = $nb;
   
$mart = $com;
   
$posD=$posB;
   while (
$longueur > $posA)
   {
      while(
substr($mart,$posD,1) != " ")
      {
         
$posD=$posD+1;
         if(
$posD>$longueur)break;
      }
      
$posB=$posD;
      
$buff = substr($com, $posA, $posB);
      
$Texte = $Texte."$buff<br>";
      
$posA = $posA + $posB;
      
$posB=$nb;
      
$posD=$posB;
      
$buff = "";
      
$mart = substr($com,$posA,$longueur);
   }
   
$buff = substr($com, $posA, $longueur);
   
$Texte = $Texte."$buff<br>";
   return
$Texte;
}
?>


Vérifier le http:// devant une url[20-01-2002]
Posté par Geoffrey BACHELET

Pour vérifier qu'il y a bien le http:// et l' ajouter au besoin :

if ( !ereg("^http://(.*)",$url) ) $url = "http://".$url;

Cette astuce permet d'éviter les liens du genre http://www.votresite.com/www.votresite.com.

Récupérer les n premiers mots d'une chaîne[19-01-2002]
Posté par Guillaume Contival

Une petite fonction simple mais fort pratique, pour afficher un résumé de 20 mots par exemple :

<?
function resume_xmots($MaChaine,$xmots)  
{  
   
$ChaineTab=explode(" ",$MaChaine);  
   for(
$i=0;$i<$xmots;$i++)  
   {  
      
$NouvelleChaine.=" "."$ChaineTab[$i]";  
   }
   return
$NouvelleChaine;  
}
?>

Utilisation :

<?
echo resume_xmots($MaChaine,20) ;
?>


Retirer les accents d'une chaîne de caractère[19-01-2002]
Posté par Fabrice Potec

<?
/* Retire les accents de la chaine "$string" */

$Caracs = array("¥" => "Y", "µ" => "u", "À" => "A", "Á" => "A",
                
"Â" => "A", "Ã" => "A", "Ä" => "A", "Å" => "A",
                
"Æ" => "A", "Ç" => "C", "È" => "E", "É" => "E",
                
"Ê" => "E", "Ë" => "E", "Ì" => "I", "Í" => "I",
                
"Î" => "I", "Ï" => "I", "Ð" => "D", "Ñ" => "N",
                
"Ò" => "O", "Ó" => "O", "Ô" => "O", "Õ" => "O",
                
"Ö" => "O", "Ø" => "O", "Ù" => "U", "Ú" => "U",
                
"Û" => "U", "Ü" => "U", "Ý" => "Y", "ß" => "s",
                
"à" => "a", "á" => "a", "â" => "a", "ã" => "a",
                
"ä" => "a", "å" => "a", "æ" => "a", "ç" => "c",
                
"è" => "e", "é" => "e", "ê" => "e", "ë" => "e",
                
"ì" => "i", "í" => "i", "î" => "i", "ï" => "i",
                
"ð" => "o", "ñ" => "n", "ò" => "o", "ó" => "o",
                
"ô" => "o", "õ" => "o", "ö" => "o", "ø" => "o",
                
"ù" => "u", "ú" => "u", "û" => "u", "ü" => "u",
                
"ý" => "y", "ÿ" => "y");
    
$string  = strtr("$string", $Caracs);
?>


Retirer un des paramètres du query string[19-01-2002]
Posté par Lanfeust

Cette fonction permet de créer un lien facilement sans avoir des doublons dus aux paramètres parfois déjà présents dans le query string.

Exemple : index.php?page=1 et on doit y ajouter &page=2

La fonction permet de retirer sans dommage la définition de "page" déjà présente dans le query string, en laissant intacts les autres paramètres.
En entrée : une chaine contenant l'intitulé de la variable à exclure, et UN query string (si vide => $QUERY_STRING par défaut).
En sortie : renvoie le nouveau query string.

<?
function excludeqsvar($var, $qstring = '')
{
    global
$QUERY_STRING;

    if(
strlen($qstring)==0)
    {
        if(
strlen($QUERY_STRING)==0)
            return
$qstring;
        else
$qstring=$QUERY_STRING;
    }

    
$returnval="";
    
$thevars=explode("&",$qstring);
    
$i=0;
    while(
$thevars[$i])
    {
        
$namevar=explode("=",$thevars[$i++]);
        if(
strcmp($namevar[0],$var)!=0)
        
$returnval.=implode("=",$namevar).(($thevars[$i])?"&":"");
    }
    if(
$returnval[strlen($returnval)-1]=="&")
        
$returnval[strlen($returnval)-1]="";
    return
$returnval;
}
?>


[1 commentaire]

Remplissage d'une chaîne[06-01-2002]
Posté par Dj ThuG

<?
function fillStr($str, $outLength, $remplissage)
{
  
//Formate une chaîne
  
if (strlen($str)>$outLength)
    
$str = substr($str, 0, $outLength); //Si trop long, on coupe

  
$newStr = sprintf("%".$remplissage.$outLength."s", $str);
  return
$newStr;
}
?>

Utilisation :


$chaine = 3;
echo fillStr($chaine,10,0); // >> 0000000003


Remplacer une sous-chaîne par une image[09-12-2001]
Posté par Dj ThuG

Voici une petite fonction, qui vous permettra de remplacer des sous-chaînes par une image. Généralement, elle sert pour un forum ou un système de news ;)

<?

$maVar
= 'En espérant que ce script en aidera d\'autres ;)'."\r\n\r\n";
$maVar .= '//mail moi, s\'il vous pose un pb';

// $GLtabSmiley[code_a_utiliser] = chemin_de_l_image_associée;
$GLtabSmiley = array();
$GLtabSmiley[';)'] = 'pix/wink.gif';
$GLtabSmiley['//mail'] = 'pix/mail.gif';

function
do_transform($texte,$GLtbSm)
{
    while ( list(
$code , $pathimg ) = each( $GLtbSm ) )
    {
        
$texte = str_replace($code,
                           
'<IMG SRC="'.$pathimg.'" BORDER="0" ALIGN="absmiddle">',
                           
$texte);
    }

    return
$texte;
}

echo
nl2br( do_transform( $maVar , $GLtabSmiley ) );

?>


Un indentifiant unique non-aléatoire[18-11-2001]
Posté par Jems

Voila une fonction qui permet d'obtenir un identifiant qui n'est pas basé sur des valeurs aléatoires mais sur le temps. Il suffit d'utiliser un bon vieux timestamp qui change déja toutes les secondes.

Pour gagner en précision temporelle, on le concatène avec les 6 premiers chiffres du microtime, l'identifiant change
donc maintenant un million de fois par seconde.

Notre identifiant fait 16 caractères, pour en obtenir un plus court, on le coupe en deux puis on convertit les deux morceaux en hexadécimal.

Pour finir, on concatène les deux résultats hexadécimaux, ce qui donne un identifiant composé des chiffres 0 à 9 et des lettres "abcdef".

J'utilise cette fonction dans un script de boutique en ligne pour générer mes ID de client.

<?

function get_hex_id ()
{
    
// Cette fonction renvoie un identifiant unique.

    
$micro = substr (microtime(), 2, 6) ;
    
$concat = time() . $micro ;
    
$dec_1 = substr ($concat, 0, 8) ;
    
$dec_2 = substr ($concat, 8, 8) ;
    
$hex_1 = dechex ($dec_1) ;
    
$hex_2 = dechex ($dec_2) ;
    
$id = $hex_1  . $hex_2 ;

    return
$id ;
}

// Affichage de la page.

$nouvel_id = get_hex_id () ;   

print
"ID unique : <b>" ;
print
$nouvel_id ;
print
"</b>" ;
print
"<br><br>" ;
print
"<a href=$PHP_SELF>Voir un autre ID</a>" ;

?>


Coupure de texte sans coupure de mot[09-09-2001]
Posté par Benhur

Un petit REGEX qui permet de garder les X premiers caractères d'un texte, sans couper de mot.

<?
$nbcar
= 200;
$Texte = (strlen($Texte) > $nbcar)
         ?
ereg_replace("(.{$nbcar})( .*)$","\\1 ...", $Texte)
         :
$Texte;
?>


[2 commentaires]

Trouver le texte entre quotes[09-09-2001]
Posté par Frédéric Bouchery

Pour retrouver un texte compris entre simples ou doubles quotes, voici une expression régulière complexe, mais efficace :

<?
$txt  
= "un texte quelconque : 'c\'est un test avec une double quote (\")";
$txt .= "entre les simples quote' terminé";

$masque = '`((\')|")(.*?)((?<!\\\)(?(2)(\')|(")))`s';

preg_match_all($masque,$txt,$array);

foreach(
$array[3] as $resultat)
   echo
stripslashes($resultat) . '<br>';
?>

C'est un exellent exercice pour comprendre les masques conditionnels et les assertions arrières.

(?(2) masque_oui | masque_non) : si la deuxième parenthèse "marche" j'applique le masque_oui, sinon le masque_non.
Donc si je commence par une simple quote, je DOIS terminer par une simple quote.

(?>!maque_arriere) : je regarde en arrière si le masque n'existe pas sans le prendre en compte. Donc mon masque
contitionnel ne doit pas être précédé d'un anti-slashe (\).

Remarque :
J'utilise les back-quotes (Alt Gr + 7) pour encadrer mes expressions régulières Perl, car c'est un caractère peu utilisé.

Générer un mot de passe[26-08-2001]
Posté par Bastoon

Voici une fonction qui permet de générer un mot de passe alphanumérique avec des majuscules et minuscules en omettant les chiffres 0,1 et les lettres l,i,o qui peuvent se confondre.

<?
/*Script par seb Gouraud*/

function MDP()
{
  
$chrs = 6 ;
  
$pwd = ""  ;
  
mt_srand ((double) microtime() * 1000000);
  while (
strlen($pwd)<$chrs)
  {
    
$chr = chr(mt_rand (0,255));
    if (
eregi("^[a-hj-km-np-z2-9]$", $chr))
      
$pwd = $pwd.$chr;
  };
  return
$pwd;
}
  
echo
MDP();

?>


[1 commentaire]

La fin des accents[12-08-2001]
Posté par François BAUD

Ce n'est pas une REGEXP, mais le fonctionnement est le même et ne fonctionne qu'à partir de la version 4 de [PHP].

Plus d'accent en sortie de cette fonction.

<?
/**
*       Function to UN-accentuate a given $STRING
*       @param  : string $STRING
*       @return : string $STRING
**/
function chunk_accentued_chars ($STRING)
{
  
$STRING= strtr ($STRING,
  
"&#352;&#338;&#381;&#353;&#339;&#382;&#376;¥µÀÁÂÃÄÅÆÇ
  ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ"
,
  
"SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaac
  eeeeiiiionoooooouuuuyy"
);

  return
$STRING ;
}
?>


Parcourir l'alphabet[26-07-2001]

Une petite boucle qui permet de parcourir toutes les lettres de l'alphabet :

<?

for ($ascii = ord('A'); $ascii <= ord('Z'); $ascii++)
{
    echo
chr($ascii);
}

?>


Remplacements : méthode extrèmement simple et rapide[16-07-2001]
Posté par Mathieu "POI" HENRI

Cette méthode est "case-sensitive", mais c'est la plus simple que je connaisse :

<?

$stringMappingArray
= array();

$stringMappingArray[ "remplace ceci" ] = "par cela";
$stringMappingArray[ "toto" ]          = "titi";
$stringMappingArray[ "tutu" ]          = "tata";

$string = "toto & tutu";
$string = strtr( $string, $stringMappingArray );
echo
$string;

?>


[1 commentaire]

Couper des mots trop longs[05-07-2001]
Posté par Emmanuel ROBERT

Une fonction toute simple et très pratique. Elle permet de couper des mots très longs situés dans une chaîne.
Bon, vous allez me dire : "mais à quoi ça peut bien servir ?".

Par exemple, pour un forum, si quelqu'un entre un message avec 200 caractères à la suite, sans espace, ça va vous foutre tout votre affichage en l'air, surtout si c'est affiché dans un tableau. C'est là que cette petite fonction intervient.

=> le but : insérer un espace (ou autre chose selon l'utilisation) tous les X caractères seulement dans les mots dépassant une certaine longueur.

<?
function cutLongWords($string,$length='10',$separation=' ')
{
  return
preg_replace('/([^ ]{'.$length.'})/si','\\1'.$separation,$string);
}

### EXEMPLE
$test = 'motCourt motVraimentTrèsTrèsTrèsExtrêmementLong';
echo
cutLongWords($test);
// retourne : "motCourt motVraimen tTrèsTrèsT rèsExtrême mentLong"
echo cutLongWords($test,'5');
// retourne : "motCo urt motVr aimen tTrès TrèsT rèsEx trême mentL ong"
?>


Tronquer une chaîne et compléter par '...'[14-04-2001]
Posté par Laurent HAAS

Pour tronquer une chaîne trop longue et mettre à la suite 3 points évoquateurs :

<?
$comment
= "Un commentaire vraiment très long qu'il va falloir tronquer !";
$lg_max = 40;

if (
strlen($comment) > $lg_max)
{
    
$comment = substr($comment, 0, $lg_max);
    
$last_space = strrpos($comment, " ");
    
$comment = substr($comment, 0, $last_space)."...";
}

echo
$comment;
?>

L'éxecution donnera :

Un commentaire vraiment très long qu'il...

[2 commentaires]

Compter les mots ... autre version[14-02-2001]
Posté par Frédéric Bouchery

Pour compter le nombre de mots dans une phrase (ici stockée dans la variable $phrase) :

<?
    $mots
= split(" *[][ ,.;:?!'\"{()}] *", $phrase);
    
$nombre_mots = count($mots);
?>

Placez les ponctuations que vous voulez dans les [..]

Compter les mots d'une phrase[29-01-2001]

Pour compter le nombre de mots dans une phrase (ici stockée dans la variable $phrase) :

<?
    $mots
= split(" ", $phrase);
    
$nombre_mots = count($mots);
?>


[1 commentaire]

Supprimer les accents d'une chaîne[16-11-2000]

Voici une fonction qui permet de supprimer les accents et autres cédilles d'une chaîne de caractères. Très pratique pour les pages WAP et les recherches MySQL :

<?
function OterAccents($chaine) {
  return(
strtr( $chaine,
                 
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
                 
"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) );
}
?>


Sauts de lignes HTTP ou Shell[08-11-2000]

Voici une manière simple de générer des sauts lignes différents suivant que vous exécutez PHP via le serveur Web (donc pour un affichage dans un navigateur) ou via le Shell (pour un affichage dans une console) :

<?
$saut_ligne
= isset($REMOTE_ADDR) ? "<BR>" : "\n";

print
"Salut l'ami,".$saut_ligne;
print
"Ca roule ?".$saut_ligne;
?>


[1 commentaire]

Here-Doc : Chaîne sur plusieurs lignes[20-08-2000]

Il est possible, depuis PHP4, de déclarer une chaîne sur plusieurs lignes, en utilisant une syntaxe similaire à celle du Perl : here-doc.

<?
$chaine
= <<<EOD
Cette chaîne commence là,
puis se poursuit ici,
pour enfin terminer sa course là !
EOD;
?>


[1 commentaire]

Identifiant unique[20-08-2000]

Vous avez besoin d'un identifiant unique pour gérer vos sessions ? Essayez ça :

<?
    mt_srand
((double)microtime()*1000000);
    
$unique_id = md5( mt_rand(0,9999999) );
?>


newline et <BR> : nl2br[28-06-2000]
Posté par Patrick Morand

Si on a une chaîne de caractères comportant des sauts de lignes (\n), il faut les convertir en balise <BR> pour assurer un affichage correct dans une page.

Ceci peut être réalisé par la fonction nl2br().

<?
print( nl2br($Chaine) );
?>


Anti-Spam 2[26-06-2000]
Posté par sdevil

Cette fonction est similaire à la fonction Anti-spam proposée dans les Astuces Regex, mais elle a l'avantage d'être beaucoup plus générique.

<?
function BrouilleMail($chaine) {

  
$ret_chaine='';
  
$lg = strlen($chaine);

  for (
$x = 0; $x &lt; $lg; $x++) {
    
$ord = ord(substr($chaine, $x, 1));
    
$ret_chaine .= "&#$ord;";
   }

   return
$ret_chaine;
?>


Passer en paramètres une chaîne à plusieurs mots[11-06-2000]

Il est parfois nécessaire de passer en paramètre d'une URL une chaîne comprenant plusieurs mots ou des caractères spéciaux (&, +, ...). La fonction urlencode() va nous permettre de le faire :

Exemple :

<?
  $requete
= &quot;SELECT * FROM nom&quot;;
  
$requete = urlencode($requete);
  
header('Location: resultats.php3?sql='.$requete);
?>

La fonction urldecode() permettra elle de décoder le paramètre.

Accéder à chaque caractère d'une chaîne[24-05-2000]

Une chaîne de caractères peut être vue aussi comme un tableau de caractères. Il devient possible dès lors d'accéder à chaque caractère en spécifiant sa position :

<?
  $chaine
= "www.phpinfo.net";
  echo
$chaine[0] // Affiche "w" (le 1er)
  
echo $chaine[5] // Affiche "h"
?>

On peut donc grâce à une simple boucle afficher chaque caractère :

<?
  $chaine
= "www.phpinfo.net";
  for (
$i = 0; $i < strlen($chaine); $i++)
    echo
$chaine[$i]." ";
?>


[1 commentaire]

Cotes et guillemets[21-05-2000]

Une chaîne placée entre des simples cotes n'est pas évaluée par PHP.

Exemple :

<?
    $prenom
= "Bob";
    echo
'Bonjour $prenom !';
?>

Donne : Bonjour $prenom ! et non pas Bonjour Bob !

Décomposer une URL[10-05-2000]

Il est parfois nécessaire de pouvoir récupérer les différentes informations composant une url. La fonction parse_url() peut répondre à ce besoin. Elle retourne en effet un tableau associatif constitué des éléments de l'URL.

<?
$url
= "http://www.phpinfo.net/rep/index.php3?p=1&r=2";

$tabUrl = parse_url($url);

echo
"scheme = " . $tabUrl["scheme"] . "<BR>n";
echo
"host = " . $tabUrl["host"] . "<BR>n";
echo
"path = " . $tabUrl["path"] . "<BR>n";
echo
"query = " . $tabUrl["query"] . "<BR>n";
?>

On obtient :

scheme = http
host = www.phpinfo.net
path = /rep/index.php3
query = p=1&r=2


Caractères spéciaux[30-04-2000]

Pour afficher un caractère à partir de son code héxadécimal, utiliser la syntaxe suivante :

<?
echo "\x20"; // Affiche un espace
?>

Les autres caractères spéciaux :
\" => "
\\ => \
\n => nouvelle ligne
\r => retour chariot
\t => tabulation


Synseo