preg_replace

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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à :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

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.

Invité
Invité n'ayant pas de compte PHPfrance

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 ® ?

Eléphant du PHP | 443 Messages

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...

Invité
Invité n'ayant pas de compte PHPfrance

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

ViPHP
ViPHP | 3607 Messages

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 ;)

Eléphant du PHP | 443 Messages

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.
Modifié en dernier par Tracker le 05 oct. 2007, 21:55, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3607 Messages

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]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 oct. 2007, 14:14

[HS]jojolapine, tu sors :arrow:
:langue:[HS/]
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 443 Messages

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]