web-dev-qa-db-ja.com

「\ u00a0」の文字列があり、「」に置き換える必要があるstr_replaceが失敗する

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

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

Str_replaceを使用して、これまでに見つけたすべて(\ r\n)をクリーンアップできますが、\ u00a0を使用すると運がありません。

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode

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

戻り値:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]

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

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

____編集____

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

21
0plus1

私があなたのコードをコピー/ペーストするとき、私のために働きます。 str_replace()の二重引用符を一重引用符に置き換えるか、バックスラッシュ("\\u00a0")。

5

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

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
48
Arne

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

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

str_replace(chr(160),' ');

これが誰かのお役に立てば幸いです。理解するのに1時間かかりました。

4
Jeremy Jacob

マイナーポイント:\ u00a0は実際には改行なしの空白文字です。 http://www.fileformat.info/info/unicode/char/a0/index.htm

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

3

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

$str = trim($str, chr(0xC2).chr(0xA0));
2

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

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
1
patrick

これを試して:

$str = str_replace("\u{00a0}", ' ', $str);
1

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

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

または、二重引用符を使用したい場合は、次のようにバックスラッシュをエスケープする必要があります。

str_replace("\\u00a0", "",$string);
0
oezi