web-dev-qa-db-ja.com

PHP変数の空白を削除するにはどうすればよいですか?

私はこれを知っています コメント PHP.net。 PHPのようなtrのような同様のツールがあれば、簡単に実行できます。

tr -d " " ""

関数php_strip_whitespaceの実行に失敗しました

$tags_trimmed = php_strip_whitespace($tags);

正規表現関数も実行に失敗しました

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

正規表現は、デフォルトではUTF-8文字を考慮しません。 \sメタ文字は、元のラテン語セットのみを説明します。したがって、次のコマンドはタブ、スペース、キャリッジリターン、および改行のみを削除します

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

UTF-8が主流になりつつあるため、この式は新しいutf-8文字に達すると失敗/停止し、\sで説明できない空白が残ります。

Unicode/utf-8で導入された新しいタイプの空白を処理するには、現代の空白を照合および削除するために、より広範な文字列が必要です。

デフォルトでは正規表現はマルチバイト文字を認識しないため、区切られたメタ文字列のみを使用して識別し、バイトセグメントが他のutf-8文字(クワッドセットの\x80すべての\x80サブバイトをスマートクォートで置き換えます)

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

これは、タブ、改行、垂直タブ、改ページ、キャリッジリターン、スペースを考慮して削除し、さらに here から削除します:

nextline、改行なしスペース、モンゴル語母音セパレータ、[en quad、em quad、en space、em space、em-per-perスペース、four-per-emスペース、six-per-emスペース、figureスペース、句読点スペース、シンスペース、ヘアスペース、ゼロ幅スペース、ゼロ幅非ジョイナー、ゼロ幅ジョイナー]、ラインセパレーター、パラグラフセパレーター、ナローノーブレークスペース、ミディアム数学的スペース、ワードジョイナー、表意文字スペース、ゼロ幅非破壊スペース。

これらの多くは、テキスト検索、認識を汚す自動化されたツールまたはサイトからエクスポートされ、パーサーがjumpを引き起こすPHPソースコードに目に見えないように貼り付けられるXML次のコマンド(段落と行の区切り)。これにより、コードの行がスキップされ、「テキスト送信感染症」と呼ばれ始めた断続的で説明のつかないエラーが発生します。

[ウェブからコピーして貼り付けるのは安全ではありません。文字スキャナーを使用してコードを保護します。笑]

40
ppostma1

any空白を削除するには、正規表現を使用できます

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

UTF-8文字列の空白を処理できるものについては this answer も参照してください。

134
Paul Dixon

連続した空白を削除する必要がある場合があります。次のようにできます:

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

出力:

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

Preg_replaceは[:space:]

12
Tyler Carter

PHPのトリム関数を使用して、両側(左と右)をトリムできます。

 trim($yourinputdata," ");

または

trim($yourinputdata);

使用することもできます

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

システム:PHP 4,5,7
ドキュメント: http://php.net/manual/en/function.trim.php

7
Kumar

$ tagsからすべての空白をすべて削除したい場合は、次の理由だけではありません:

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

新しい行を削除したい場合、もう少し必要です...

5
camomileCase

可能なオプションは、変数をファイルとしてシミュレートするためにカスタムファイルラッパーを使用することです。これを使用して達成できます:

1)まず、ラッパーを登録します(ファイルに1回だけ、session_start()のように使用します):

stream_wrapper_register('var', VarWrapper);

2)次に、ラッパークラスを定義します(実際には高速で記述されており、完全に正しいわけではありませんが、動作します)。

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)次に、var://プロトコルのラッパーで任意のファイル関数を使用します(include、requireなどにも使用できます)。

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

注:変数をグローバルスコープ(グローバル$ __ myVarなど)にすることを忘れないでください

2
micropro.cz

また、preg_replace_callback 関数 。この関数は、その兄弟preg_replaceそれ以外は、出力の操作方法をより詳細に制御できるコールバック関数を使用できます。

$str = "this is a   string";

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

ereg_replaceを使用して実行できます

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

文字列全体からスペースを削除する簡単な方法は、explode関数を使用し、forループを使用して文字列全体を印刷することです。

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

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

古い投稿ですが、次のように行うことができます:

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;

HTMLエンティティが来ると、標準的なtrim()関数は問題になる可能性があります。そのため、この問題を処理するために使用される「スーパートリム」機能を作成しました。また、ストリングの開始、終了、またはブース側からトリミングすることもできます。