1. ホーム
  2. php

[解決済み] PHPの変数から空白を取り除くには?

2023-07-12 11:08:06

質問

私はこれを知っています コメント PHP.netです。 のようなツールが欲しいです。 tr のようなツールを PHP 用に作り、単純に

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 が他の utf-8 文字に置き換わるのを防ぐためです (クワッドセットの \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, non-breaking spaces, mongolian vowel separator, [en quad, em quad, en space, em space, three per-em space, four per-em space, six per-em space, figure space, punctuation space, thin space, hair space, zero width space, zero width non-joiner, zero width joiner], line separator, paragraph separator, narrow no-breaking space, medium mathematical space, word joiner, ideographical space, the zero width non-breaking space, and the zero width break spaces.

これらの多くは、自動化されたツールやサイトからエクスポートされた xml ファイルで大混乱を引き起こし、テキスト検索や認識を台無しにします。 次のコマンドにジャンプする (段落や行の区切り文字) を使用してコード行をスキップさせ、断続的で説明のつかないエラーを発生させます。

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