2011-08-16 18 views
6

完全に単純です:utf8_encode($ string)は、通常の空白を改行しないスペース( "\ u00a0")に置き換えます。私はstr_replaceで結果をフィルタリングしようとしました:PHP utf8_encode()は空白を改行しない空白に変換します

str_replace("\u00a0", " ", utf8_encode($string)) 

しかし、それは修正されませんでした。

編集:一言、私はばかだ。これはutf8_encode()でも問題ありません。私はその機能を使用していると思っていました。私のデータは、AJAXリクエストのためにjson_encode()によって実行されています。 json_encode()の問題ですか?私はスタックオーバーフローを悪用することの有罪かもしれないと心配します。私はそれをグーグルしようとします。

最終編集:Word文書からMySQLテーブルにコピーされたデータ自体に問題がありました。すべてのスペースは改行されていないスペースとしてコピーされました。みんなの時間を無駄にして申し訳ありません。

+0

を試してみて、どのように私は戻って私の定期的なスペースを得ることができますか? –

+0

文字列がUTF-8でエンコードされている場合は、コードポイント値自体ではなく、コード単位の対応するシーケンスを置き換える必要があります。 –

+0

あなたの入力は? 0xA0はISO 8859-1の非改行スペースです。 –

答えて

12

str_replace( "\ u00a0"、 ""、utf8_encode($ dat))。しかし、それはそれを修正しませんでした。

PHPには、ネイティブのUnicode文字列ではなく、バイト文字列しかありません。その結果、\uエスケープはなく、入力中のバックスラッシュ文字のシーケンスを文字通り変換するよう依頼していました。あなたは(あなたはおそらく持っているISO-8859-1データ上で行われていればutf8_encodeに渡す前に)離れて\xA0交換する必要があります非改行空白文字を取り除くために

、または\xC2\xA0(UTF-にトランスコードした後に行われていれば8)。

utf8_encodeはISO-8859-1からUTF-8にのみトランスコードされますが、スペースには触れません。したがって、あなたの実際のデータには改行がないことが疑わしいです。

+1

あなたの疑惑に対して+1、私と同じ –

0

質問がされ、この

$str = trim($str, chr(0xC2).chr(0xA0)) 
関連する問題