2009-08-26 10 views
0

Je sais que c'est une question courante, mais tout ce que j'ai trouvé semble supprimer les espaces blancs.PHP: Supprimer les caractères non imprimables sans enlever les espaces blancs

Je cherche une expression régulière qui dépouillera les caractères non imprimables SANS changer aucun espace. C'est une fonction à laquelle toutes les entrées utilisateur seront filtrées, ce qui signifie que tous les caractères que vous pouvez normalement taper sur un clavier sont valides. Ex: les accents que vous voyez en espagnol sont valides. Fondamentalement tout ce que vous pourriez afficher en utilisant le jeu de caractères UTF 8.

Parce que c'est SQL Server, je ne pense pas que l'approche "SET NAMES UTF8" fonctionnera.

Voici ce que j'ai.

function stripNonPrintable($input) 
{ 
    return preg_replace('/[\x00\x08\x0B\x0C\x0E-\x1F]/', '', $input); 
} 

Répondre

1

Essayez quelque chose comme ceci:

function stripNonPrintable($input) { 
    $bad=array(
     '\x00\x08\x0B\x0C\x0E-\x1F' 
    ); 
    $fixed=array(
     '' 
    ); 
    return str_replace($bad, $fixed, $input); 
} 
+0

simple, mais efficace. Merci. –

0

Vous pouvez toujours échapper à la première des espaces:

function stripNonPrintable($input) 
    { 
     $input = preg_replace('/ /','%%%%SPACE%%%%%%', $input); 
     $input = preg_replace('/\t/','%%%%TAB%%%%%%', $input); 
     $input = preg_replace('/\n/','%%%%NEWLINE%%%%%%', $input); 

     $input = preg_replace('/[\x00\x08\x0B\x0C\x0E-\x1F]/', '', $input); 

     $input = str_replace('%%%%SPACE%%%%%%', ' ', $input); 
     $input = str_replace('%%%%TAB%%%%%%',  "\t", $input); 
     $input = str_replace('%%%%NEWLINE%%%%%%', "\n", $input); 

    } 

Pas élégant, mais il fonctionne.

Questions connexes