有谁知道如何从字符串中删除十六进制A0?

时间:2012-11-04 18:49:27

标签: php javascript hex

我有以下字符串:

  

您好。你好。

如果你在十六进制编辑器中查看字符串,它看起来像这样:

  

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

请注意中间的A0。 (这是不间断的空格字符)。

A0打破了我正在使用的一些JavaScript,因此我希望在PHP脚本预处理字符串时将其删除。

如果我使用以下代码:

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

A000取代,这也是一个麻烦的角色 正如您从preg_replace函数中看到的那样,它应该替换为空格或20

你们中的任何人都知道如何摆脱这个麻烦的A0角色吗?

谢谢。

编辑:我使用的是Windows-1252,无法切换到UTF-8。如果您使用的是UTF-8 ...

,这不会有问题

2 个答案:

答案 0 :(得分: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   

答案 1 :(得分:2)

我想出了一个解决方案:

首先转换编码类型,然后执行replace:

$text = mb_convert_encoding($text, "Windows-1252", "UTF-8");
$text = preg_replace("/\xA0/"," ", $text);