81

私はこのコメントPHP.netを知っています。trPHPと同様のツールを使用して、簡単に実行できるようにしたいと思います。

tr -d " " ""

php_strip_whitespaceによって関数を実行できませんでした

$tags_trimmed = php_strip_whitespace($tags);

正規表現関数も実行できませんでした

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

15 に答える 15

134

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

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

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

于 2009-08-14T19:40:17.820 に答える
52

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

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

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

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

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

nextline、非区切りスペース、モンゴル語の​​母語区切り文字、[en quad、em quad、en space、em space、three-per-em space、four-per-em space、6-per-em space、figure space、punctuation space 、細いスペース、ヘアスペース、ゼロ幅スペース、ゼロ幅非ジョイナー、ゼロ幅ジョイナー]、行区切り記号、段落区切り記号、狭いノーブレークスペース、中数学スペース、ワードジョイナー、イデオグラフィックスペース、およびゼロ幅非ジョイナースペースを壊します。

これらの多くは、自動化されたツールやサイトからエクスポートされたときにxmlファイルに大混乱をもたらし、テキストの検索や認識を汚し、PHPソースコードに目に見えない形で貼り付けることができます。これにより、パーサーは次のコマンド(段落と行の区切り文字)にジャンプし、行が発生します。スキップされるコードの数が断続的で説明のつかないエラーになり、「テキスト送信された病気」と呼ばれ始めました

[Webからコピーして貼り付けるのはもう安全ではありません。コードを保護するために文字スキャナーを使用してください。笑]

于 2016-10-14T17:03:30.137 に答える
27

場合によっては、連続する空白を削除する必要があります。あなたはこのようにそれを行うことができます:

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

出力:

My name is
于 2013-03-07T05:40:39.953 に答える
16
$string = str_replace(" ", "", $string);

preg_replaceは次のようなものを探していると思います[:space:]

于 2009-08-14T19:37:51.177 に答える
8

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

于 2016-06-25T12:30:53.110 に答える
6

$ tagsからすべての空白を削除したい場合は、次のようにします。

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

新しい行などを削除したい場合は、もう少し必要になります...

于 2009-08-14T19:39:35.697 に答える
2

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

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など)に含めることを忘れないでください

于 2013-09-04T23:48:33.070 に答える
2

これは古い投稿ですが、最短の回答はここにリストされていないので、今追加しています

strtr($str,[' '=>'']);

「この猫の皮を剥ぐ」ためのもう1つの一般的な方法は、このように爆発と爆縮を使用することです。

implode('',explode(' ', $str));

于 2020-11-27T19:25:47.403 に答える
1

あなたはを使用してそれを行うことができますereg_replace

 $str = 'This Is New Method Ever';
 $newstr = ereg_replace([[:space:]])+', '',  trim($str)):
 echo $newstr
 // Result - ThisIsNewMethodEver
于 2015-08-16T07:50:02.987 に答える
1

関数も使用しpreg_replace_callbackます。preg_replaceこの関数は、出力を操作する方法をより細かく制御できるコールバック関数を受け取ることができることを除いて、その兄弟と同じです。

$str = "this is a   string";

echo preg_replace_callback(
        '/\s+/',
        function ($matches) {
            return "";
        },
        $str
      );
于 2017-12-14T21:37:44.537 に答える
1
$string = trim(preg_replace('/\s+/','',$string));
于 2020-01-11T01:22:20.720 に答える
0

古い投稿ですが、次のように実行できます。

if(!function_exists('strim')) :
function strim($str,$charlist=" ",$option=0){
    $return='';
    if(is_string($str))
    {
        // Translate HTML entities
        $return = str_replace(" "," ",$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;

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

于 2018-01-01T10:27:46.210 に答える
0

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

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

                echo $a[$i];
            }
于 2019-03-06T14:03:07.330 に答える
0

\ s regex引数は、UTF-8マルチバイト文字列と互換性がありません。

このPHPRegExは、UTF-8文字列の代わりにPCRE(Perl互換正規表現)ベースの引数を使用してこれを解決するために作成したものです。

function remove_utf8_whitespace($string) { 
   return preg_replace('/\h+/u','',preg_replace('/\R+/u','',$string)); 
}

-使用例-

前:

$string = " this is a test \n and another test\n\r\t ok! \n";

echo $string;

 this is a test
 and another test
         ok!

echo strlen($string); // result: 43

後:

$string = remove_utf8_whitespace($string);

echo $string;

thisisatestandanothertestok!

echo strlen($string); // result: 28

PCRE引数リスト

ソース:https ://www.rexegg.com/regex-quickstart.html

Character   Legend  Example Sample Match
\t  Tab T\t\w{2}    T     ab
\r  Carriage return character   see below   
\n  Line feed character see below   
\r\n    Line separator on Windows   AB\r\nCD    AB
    CD
\N  Perl, PCRE (C, PHP, R…): one character that is not a line break \N+ ABC
\h  Perl, PCRE (C, PHP, R…), Java: one horizontal whitespace character: tab or Unicode space separator      
\H  One character that is not a horizontal whitespace       
\v  .NET, JavaScript, Python, Ruby: vertical tab        
\v  Perl, PCRE (C, PHP, R…), Java: one vertical whitespace character: line feed, carriage return, vertical tab, form feed, paragraph or line separator      
\V  Perl, PCRE (C, PHP, R…), Java: any character that is not a vertical whitespace      
\R  Perl, PCRE (C, PHP, R…), Java: one line break (carriage return + line feed pair, and all the characters matched by \v)      
于 2019-10-21T17:41:48.550 に答える
0

タグの形式の空白には、いくつかの特殊なタイプがあります。あなたが使用する必要があります

$str=strip_tags($str);

冗長なタグ、エラータグを削除し、最初に通常の文字列を取得します。

そして使用する

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

それは私のために働いています。

于 2020-04-28T15:59:47.720 に答える