web-dev-qa-db-fra.com

Comment effacer les espaces en variable PHP?

Je sais ceci commentaire PHP.net. Je voudrais avoir un outil similaire comme tr pour PHP tel que je puisse exécuter simplement

tr -d " " ""

Je lance sans succès la fonction php_strip_whitespace par

$tags_trimmed = php_strip_whitespace($tags);

Je lance également la fonction regex sans succès

$tags_trimmed = preg_replace(" ", "", $tags);

Une expression régulière ne prend pas en compte les caractères UTF-8 par défaut. Le \s méta-caractère ne représente que le jeu latin d'origine. Par conséquent, la commande suivante supprime uniquement les tabulations, les espaces, les retours à la ligne et les nouvelles lignes

// http://stackoverflow.com/a/1279798/54964
$str=preg_replace('/\s+/', '', $str);

UTF-8 devenant le courant dominant, cette expression échouera/arrêtera plus souvent lorsqu'elle atteindra les nouveaux caractères utf-8, laissant des espaces blancs derrière le \s ne peut pas rendre compte de.

Pour traiter les nouveaux types d'espaces blancs introduits dans unicode/utf-8, une chaîne plus étendue est nécessaire pour faire correspondre et supprimer les espaces blancs modernes.

Etant donné que les expressions régulières ne reconnaissent pas par défaut les caractères multi-octets, seule une chaîne méta délimitée peut être utilisée pour les identifier, afin d'éviter que les segments d'octet ne soient altérés dans d'autres caractères utf-8 (\x80 dans le jeu de quad pourrait remplacer tous les \x80 sous-octets dans les guillemets intelligents)

$cleanedstr = preg_replace(
    "/(\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/",
    "_",
    $str
);

Ceci prend en compte et supprime les tabulations, les nouvelles lignes, les tabulations verticales, les retours à la ligne, les retours à la ligne, les espaces et, en plus, de ici :

nextline, espaces insécables, séparateur de voyelles mongole, [en quad, em quad, en espace, espace em, espace à trois, espace à quatre, espace à six, espace de ponctuation , espace fin, espace pour les cheveux, espace pour la largeur zéro, espace pour la largeur zéro, joint pour la largeur zéro], séparateur de ligne, séparateur de paragraphe, espace étroit pour la pause, espace mathématique moyen, menuisier de mot, espace idéographique espace de rupture.

Beaucoup d’entre eux causent des ravages dans les fichiers xml lorsqu’ils sont exportés depuis des outils automatisés ou des sites qui encrassent les recherches de texte, la reconnaissance et peuvent être collés de manière invisible dans PHP le code source qui provoque l’analyseur saute à la commande suivante (séparateurs de paragraphe et de ligne), ce qui entraîne l’omission de lignes de code, ce qui entraîne des erreurs inexpliquées intermittentes que nous avons commencé à appeler "maladies transmissibles textuellement"

[Il n'est plus sûr de copier et coller depuis le Web. Utilisez un scanneur de caractères pour protéger votre code. lol]

40
ppostma1

Pour effacer les espaces , vous pouvez utiliser une expression régulière

$str=preg_replace('/\s+/', '', $str);

Voir aussi cette réponse pour quelque chose qui peut gérer les espaces dans les chaînes UTF-8.

134
Paul Dixon

Parfois, vous devez supprimer des espaces blancs consécutifs. Vous pouvez le faire comme ça:

$str = "My   name    is";
$str = preg_replace('/\s\s+/', ' ', $str);

Sortie:

My name is
26
trante
$string = str_replace(" ", "", $string);

Je pense que preg_replace serait à la recherche de quelque chose comme [:space:]

12
Tyler Carter

Vous pouvez utiliser la fonction de trim de php pour couper les deux côtés (gauche et droite)

 trim($yourinputdata," ");

Ou

trim($yourinputdata);

Vous pouvez aussi utiliser

ltrim() - Removes whitespace or other predefined characters from the left side of a string
rtrim() - Removes whitespace or other predefined characters from the right side of a string

Système: PHP 4,5,7
Docs: http://php.net/manual/en/function.trim.php

7
Kumar

Si vous voulez supprimer tous les espaces blancs de $ tags, pourquoi ne pas simplement:

str_replace(' ', '', $tags);

Si vous voulez supprimer de nouvelles lignes et telles que cela demanderait un peu plus ...

5
camomileCase

Toute option possible consiste à utiliser un wrapper de fichier personnalisé pour simuler des variables en tant que fichiers. Vous pouvez y arriver en utilisant ceci:

1) Tout d’abord, enregistrez votre wrapper (une seule fois dans le fichier, utilisez-le comme session_start ()):

stream_wrapper_register('var', VarWrapper);

2) Définissez ensuite votre classe de wrapper (elle est très vite écrite, pas tout à fait correcte, mais ça marche):

class VarWrapper {
  protected $pos = 0;
  protected $content;
  public function stream_open($path, $mode, $options, &$opened_path) {
    $varname = substr($path, 6);
    global $$varname;
    $this->content = $$varname;
    return true;
  }
  public function stream_read($count) {
    $s = substr($this->content, $this->pos, $count);
    $this->pos += $count;
    return $s;
  }
  public function stream_stat() {
    $f = fopen(__file__, 'rb');
    $a = fstat($f);
    fclose($f);
    if (isset($a[7])) $a[7] = strlen($this->content);
    return $a;
  }
}

3) Ensuite, utilisez n’importe quelle fonction de fichier avec votre wrapper sur le protocole var: // (vous pouvez l’utiliser également pour include, require, etc.):

global $__myVar;
$__myVar = 'Enter tags here';
$data = php_strip_whitespace('var://__myVar');

Remarque: N'oubliez pas d'avoir votre variable dans la portée globale (comme globale $ __ myVar)

2
micropro.cz

vous utilisez aussi preg_replace_callback une fonction . et cette fonction est identique à son frère preg_replace sauf que cela peut prendre une fonction de rappel qui vous donne plus de contrôle sur la façon dont vous manipulez votre sortie.

$str = "this is a   string";

echo preg_replace_callback(
        '/\s+/',
        function ($matches) {
            return "";
        },
        $str
      );
1
samehanwar

Vous pouvez le faire en utilisant ereg_replace

 $str = 'This Is New Method Ever';
 $newstr = ereg_replace([[:space:]])+', '',  trim($str)):
 echo $newstr
 // Result - ThisIsNewMethodEver
1
Abdulla Nilam

Un moyen simple de supprimer des espaces de la chaîne entière consiste à utiliser la fonction exploser et à imprimer la chaîne entière à l'aide d'une boucle for.

 $text = $_POST['string'];
            $a=explode(" ", $text);
            $count=count($a);
            for($i=0;$i<$count; $i++){

                echo $a[$i];
            }
0
Dhruv Thakkar

Est vieux post mais peut être fait comme ceci:

if(!function_exists('strim')) :
function strim($str,$charlist=" ",$option=0){
    $return='';
    if(is_string($str))
    {
        // Translate HTML entities
        $return = str_replace("&nbsp;"," ",$str);
        $return = strtr($return, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
        // Choose trim option
        switch($option)
        {
            // Strip whitespace (and other characters) from the begin and end of string
            default:
            case 0:
                $return = trim($return,$charlist);
            break;
            // Strip whitespace (and other characters) from the begin of string 
            case 1:
                $return = ltrim($return,$charlist);
            break;
            // Strip whitespace (and other characters) from the end of string 
            case 2:
                $return = rtrim($return,$charlist);
            break;

        }
    }
    return $return;
}
endif;

Les fonctions standard trim () peuvent poser problème lorsque viennent les entités HTML. C'est pourquoi j'ai écrit "Super Trim" la fonction utilisée pour traiter ce problème et que vous pouvez choisir est le rognage du début, de la fin ou du stand de la chaîne.

0