5

私は次の文字列を持っています:

こんにちは。こんにちは。

16進エディタで文字列を見ると、次のようになります。

48 65 6C 6C 6F 2E 20 A0 20 20 48 65 6C 6C 6F 2E

A0真ん中にあることに注意してください。(これはノーブレークスペース文字です)。

A0使用しているJavaScriptの一部が壊れているため、文字列がPHPスクリプトによって前処理されているときにJavaScriptを削除したいと思います。

次のコードを使用する場合:

$text = preg_replace("/\xA0/"," ", $text);

A0置き換えられるの00も面倒なキャラクターです。
関数からわかるpreg_replaceように、スペースまたはで置き換える必要があります20

A0この厄介なキャラクターをどうやって取り除くことができるか知っている人はいますか?

ありがとうございました。

編集:私はWindows-1252を使用していますが、UTF-8に切り替えることができません。UTF-8を使用している場合、これは問題になりません...

4

2 に答える 2

3

単純

$string = str_replace(chr(160), " ", $string);

簡単なテスト

$string = "48656C6C6F2E20A0202048656C6C6F2E" ;
                        ^----------------------- 0A

//Rebuild String
$string = pack("H*",$string);

//Replace 0A Charater 
$string = str_replace(chr(160), " ", $string);

//Send Output 
var_dump($string,bin2hex($string));

出力

string 'Hello.    Hello.' (length=16)
string '48656c6c6f2e2020202048656c6c6f2e' (length=32) 
                     ^---------------------- 0A Replaced with 02   
于 2012-11-04T18:57:34.033 に答える
2

私は解決策を見つけました:

最初にエンコードタイプを変換してから、置換を実行します。

$text = mb_convert_encoding($text, "Windows-1252", "UTF-8");
$text = preg_replace("/\xA0/"," ", $text);
于 2012-11-04T19:08:15.507 に答える