preg_replace

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_replace

par Tracker » 05 oct. 2007, 14:49

jojolapine++

Tracker, je pense que tu as donné ton avis, mais peut être que notre ami invité n'a pas le choix sur la manière de faire.
Donc, une fois que tu lui as conseillé une manière de faire, pas la peine d'insister ;)
[hs] Milles excuses, je le ferai plus :-* :arrow: [/hs]

par zeus » 05 oct. 2007, 14:14

[HS]jojolapine, tu sors :arrow:
:langue:[HS/]

par jojolapine » 05 oct. 2007, 14:14

[HS]ouais!!! je crois bien que c'est la première fois que je me fait incrémenté :lol: [/HS]

par zeus » 05 oct. 2007, 14:08

jojolapine++

Tracker, je pense que tu as donné ton avis, mais peut être que notre ami invité n'a pas le choix sur la manière de faire.
Donc, une fois que tu lui as conseillé une manière de faire, pas la peine d'insister ;)

par Tracker » 05 oct. 2007, 13:46

C'est pour un backoffice, donc l'utilisateur ne verra rien. C'est pour qu'il y ait une unité dans les noms de fichiers qu'upload l'admin pour mettre et rendre visible sur le site
Et ça change quoi ?
L'admin n'est pas forcement obligé de voir les noms des fichiers physiques. S'il doit harmoniser quelque chose il le fera sur son poste, et donc c'est pas nécessaire d'en ajouter une couche sur le serveur web... et du coup modifier sa manière de nommer les fichiers.

par jojolapine » 05 oct. 2007, 13:28

Si c'est l'admin qui upload les fichiers il n'a qu'a les renommer lui même :roll:
Plus sérieusement....
Pourquoi ne pas faire simplement un
preg_replace('#[^a-zA-Z0-9_-]#','',$nom);
ça sera tout unifié et vachement plus simple ;)

par Invité » 05 oct. 2007, 13:17

C'est pour un backoffice, donc l'utilisateur ne verra rien. C'est pour qu'il y ait une unité dans les noms de fichiers qu'upload l'admin pour mettre et rendre visible sur le site

par Tracker » 05 oct. 2007, 13:00

Franchement je comprends vraiment pas pourquoi tu t'emmerdes à ce point pour bricoler un bout de chaine. Si le contenu binaire de ta chaine te pose problème pour créer un fichier ou pour l'inserer dans un attribut xml, encode la chaine complète en base64 (ou autre algo produisant un chaine ascii réversible) dès le départ, tu t'en sers de nom de fichier, d'attribut xml et tu la décodes quand tu veux afficher le libellé...

En plus je trouve douteux de t'octroyer le droit de modifier une information fournie par l'utilisateur...

par Invité » 05 oct. 2007, 12:20

Voilà alors où j'en suis : tout amrche sauf le ® que je ne peux pas modifié dans le nom.
Voici mon code :
if ( (isset($_FILES['fichier_fr'])) and ($_FILES['fichier_fr']['error'] == 0) ) {
          $basename = basename($_FILES['fichier_fr']['name']);
          $nom = utf8_encode(str_sanitize(reverse_strrchr($basename, '.')));
          if($basename != '') {
            $extension = strrchr($_FILES['fichier_fr']['name'],'.');
            $basename = $nom.$extension;
            $dossier = '../fichiers/gamme/fr/';
            $extensions = array('.pdf', '.PDF', '.doc', '.DOC', '.xls', '.XLS', '.zip', '.ZIP', '.rar', '.RAR', '.jpg', '.JPG', '.jpeg', '.JPEG', '.gif', '.GIF', '.png', '.PNG', '.ppt', '.PPT', '.pps', '.PPS' );
            if (!in_array($extension, $extensions)) {
                 $erreur = 'erreur type';
            }
            if (!isset($erreur)) {
                  move_uploaded_file($_FILES['fichier_fr']['tmp_name'], $dossier.$basename);
                  $file = domEl('file', '', Array('label' => $_POST['label_fichier_fr'], 'name' => $basename, 'lang' => 'fr', 'securise'=>$_POST['securiser_fr']));
                  $gamme->appendChild($file);
            }
          }
        }
et les fonctions utilsiées :


function reverse_strrchr($haystack, $needle)
{
    $pos = strrpos($haystack, $needle);
    if($pos == false) {
        return $haystack;
    }
    return substr($haystack, 0, $pos );
}



function str_sanitize( $str ) {
    
    $str = remove_accents($str);
    $str = str_replace('.', '-', $str);
    $str = preg_replace('/[^\w]+/', '-', $str); 
    $str = trim($str, '-');
    $str = strtolower($str);
    return $str;

} // end of 'str_sanitize()'

/**
 * From WordPress 2.0.2
 */
function remove_accents($string) {
  
		$chars = array(
		// Decompositions for Latin-1 Supplement
		chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
		chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
		chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
		chr(195).chr(135) => 'C', chr(195).chr(136) => 'E',
		chr(195).chr(137) => 'E', chr(195).chr(138) => 'E',
		chr(195).chr(139) => 'E', chr(195).chr(140) => 'I',
		chr(195).chr(141) => 'I', chr(195).chr(142) => 'I',
		chr(195).chr(143) => 'I', chr(195).chr(145) => 'N',
		chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
		chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
		chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
		chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
		chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
		chr(195).chr(159) => 's', chr(195).chr(160) => 'a',
		chr(195).chr(161) => 'a', chr(195).chr(162) => 'a',
		chr(195).chr(163) => 'a', chr(195).chr(164) => 'a',
		chr(195).chr(165) => 'a', chr(195).chr(167) => 'c',
		chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
		chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
		chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
		chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
		chr(195).chr(177) => 'n', chr(195).chr(178) => 'o',
		chr(195).chr(179) => 'o', chr(195).chr(180) => 'o',
		chr(195).chr(181) => 'o', chr(195).chr(182) => 'o',
		chr(195).chr(182) => 'o', chr(195).chr(185) => 'u',
		chr(195).chr(186) => 'u', chr(195).chr(187) => 'u',
		chr(195).chr(188) => 'u', chr(195).chr(189) => 'y',
		chr(195).chr(191) => 'y',
		// Decompositions for Latin Extended-A
		chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
		chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
		chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
		chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
		chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
		chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
		chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
		chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
		chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
		chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
		chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
		chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
		chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
		chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
		chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
		chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
		chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
		chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
		chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
		chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
		chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
		chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
		chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
		chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
		chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
		chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
		chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
		chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
		chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
		chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
		chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
		chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
		chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
		chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
		chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
		chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
		chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
		chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
		chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
		chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
		chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
		chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
		chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
		chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
		chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
		chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
		chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
		chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
		chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
		chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
		chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
		chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
		chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
		chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
		chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
		chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
		chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
		chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
		chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
		chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
		chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
		chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
		chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
		chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
		// Euro Sign
		chr(226).chr(130).chr(172) => 'E',
	  // signe ®
	  chr(174) => '',
    chr(196).chr(162) => '');
		
		$string = strtr($string, $chars);
    }
	return $string;

}
Quelsu'un peut-il me dire pourquoi je n'arrive pas à modifié ce ® ?

par Invité » 05 oct. 2007, 11:16

si c'est ca, mais ensuite le nom du fichier (néettoyerà) je le stocke dans un fichier xml pour ensuite dans une page utilisé ce nom pour faire un lien.

par zeus » 05 oct. 2007, 11:15

Attend, on parle de quoi là ?

Depuis tout à l'heure, on essaye de nettoyer le titre d'un fichier et on se met à parser le contenu d'un fichier XML ? je ne suis pas là :?

par Invité » 05 oct. 2007, 11:06

car j'utilise des fichiers xml et ca me permet d'etre sur que le texte dans mes fichiers xml sera bien encode au bon format

par zeus » 05 oct. 2007, 11:03

Pourquoi utilises-tu la fonction utf8_encode() ?

par Invité » 05 oct. 2007, 11:01

en fait j'ai fait comme ca :
function reverse_strrchr($string, $car) {$pos = strrpos($string, $car);
    if($pos === false) {
        return $string;
    }
    return substr($string, 0, $pos );
}
ensuite j'applique à ça la finction qui me permet de me débarasser des accents, et autres caractères puis j'applique la fonction utf8_encode().

Seulement j'ai un petit problème, comment me débarasser du ® ?

par zeus » 05 oct. 2007, 10:49

Si ton but est de récupérer le nom du fichier sans l'extension, plutôt que de développer des fonctions hasardeuses, je te conseille d'utiliser pathinfo()