26

さまざまなMicrosoftOfficeスイートアプリケーション(ExcelAccess、およびWord)からの(コピー/貼り付けされた)文字列を、それぞれ独自のエンコーディングセットでクリーンアップする必要があります。

エンコードされたすべての文字を表示できるようにするために、デバッグ目的でjson_encodeを使用しています。

これまでに見つけたもの(\ r \ n)はすべてstr_replaceでクリーンアップできますが、\u00a0では運がありません。

$string = 'mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com'; //this is the output from json_encode

$clean = str_replace("\u00a0", "",$string);

戻り値:

mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com

それはまったく同じです。\u00a0を完全に無視します。

これを回避する方法はありますか?また、私は車輪の再発明をしていると感じていますが、すべての可能なエンコーディングのすべての可能な文字を完全に取り除く関数/クラスはありますか?

____編集____

最初の2つの応答の後、実際の文字列ではなくjson_encodeからの出力であるため、私の例が機能することを明確にする必要があります。

4

8 に答える 8

54

\ u00a0を含む文字列と組み合わせるord()substr()、次の呪いが機能することがわかりました。

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
于 2013-07-10T08:15:03.390 に答える
6

これを試して:

$str = str_replace("\u{00a0}", ' ', $str);
于 2019-12-27T20:30:19.313 に答える
5

私はちょうど同じ問題を抱えていました。どうやら、PHPのjson_encodeは、「改行なしスペース」を含む文字列に対してnullを返します。

解決策は、これを通常のスペースに置き換えることです。

str_replace(chr(160),' ');

これが誰かに役立つことを願っています-理解するのに1時間かかりました。

于 2012-11-20T08:57:50.220 に答える
5

私があなたのコードをコピー/貼り付けするとき、私のために働きます。中の二重引用符を一重引用符に置き換えるstr_replace()か、円記号()をエスケープしてみてください"\\u00a0"

于 2010-04-07T12:55:04.000 に答える
4

これも動作します、どこかで見つけました

$str = trim($str, chr(0xC2).chr(0xA0));
于 2014-12-18T11:59:51.207 に答える
3

マイナーポイント:\ u00a0は、実際にはノーブレークスペース文字です。http://www.fileformat.info/info/unicode/char/a0/index.htmを参照してください。

したがって、「」に置き換える方が正しい場合があります。

于 2012-11-12T20:31:24.073 に答える
1

これは私のためのトリックをしました:

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
于 2016-04-26T22:24:18.070 に答える
0

次のような一重引用符でこれを行う必要があります。

str_replace('\u00a0', "",$string);

または、二重引用符を使用する場合は、円記号をエスケープする必要があります。これは次のようになります。

str_replace("\\u00a0", "",$string);
于 2010-04-07T12:57:52.113 に答える