Php 有人知道我如何从字符串中去掉十六进制A0吗?
我有以下字符串: 你好。你好 如果您在十六进制编辑器中查看字符串,它如下所示: 48 65 6C 6C 6F 2E 20 A0 20 20 48 65 6C 6F 2EPhp 有人知道我如何从字符串中去掉十六进制A0吗?,php,javascript,hex,Php,Javascript,Hex,我有以下字符串: 你好。你好 如果您在十六进制编辑器中查看字符串,它如下所示: 48 65 6C 6C 6F 2E 20 A0 20 20 48 65 6C 6F 2E 在中间注意 A0< /代码>。(这是不间断空格字符) A0正在破坏我正在使用的一些JavaScript,因此我希望在PHP脚本预处理字符串时将其删除 如果我使用以下代码: $text = preg_replace("/\xA0/"," ", $text); A0被替换为00,这也是一个麻烦的字符。 从preg\u replac
在中间注意<代码> A0< /代码>。(这是不间断空格字符)
A0
正在破坏我正在使用的一些JavaScript,因此我希望在PHP脚本预处理字符串时将其删除
如果我使用以下代码:
$text = preg_replace("/\xA0/"," ", $text);
A0
被替换为00
,这也是一个麻烦的字符。从
preg\u replace
功能中可以看到,它应该被空格或20
替换
你们知道我怎样才能摆脱这个麻烦的A0
角色吗
多谢各位
编辑:我正在使用Windows-1252,无法切换到UTF-8。如果您使用的是UTF-8…,这不会是问题。Simple
$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
我想出了一个解决办法: 首先转换编码类型,然后执行替换:
$text = mb_convert_encoding($text, "Windows-1252", "UTF-8");
$text = preg_replace("/\xA0/"," ", $text);
对我来说更大的问题是:为什么它会破坏你的JavaScript?这令人担忧。还有哪些你不知道的角色破坏了你的剧本?你想打鼹鼠直到把它们都找到吗?@deceze:你说得对。老实说,我不知道为什么这是一个问题。看来JSON不喜欢它。在我所做的一点研究中,似乎A0被认为是一种安全风险,所以可能是不允许的。但我不确定。。。谢天谢地,我想出了一个解决办法(见下文)。我发现这很有用。因为过于本地化而关闭它是没有目的的,这是行不通的,抱歉,但是谢谢您的尝试。这个角色仍然被00替换。用和测试这个。。如果您的十六进制是
A0
,那么它肯定是replaced@Steve我没有使用字符串。。。我使用的是您提供的十六进制数48656C6C6F2E20A0202048656C6C6F2E
如果不是这样,那么您误导了任何应该回答问题的人。。。。因为您可以在标题('Content-Type:text/html;charset=utf-8')时分辨出差异问我为什么� 那就不值得回复你了。我应该生气我给了你两个演示。。使用标题('Content-Type:text/html;charset=utf-8')
和另一个标题('Content-Type:text/html;charset=Windows-1252')代码>。。。你甚至不能花时间去看simple 10,然后你回来说,实际上这个页面上的字符串已经删除了A0
。。。谢谢你浪费我的时间…爸爸,你刚刚对你的解决方案进行了彻底的修改。您的原始解决方案与我的代码不兼容。接受它不符合我的准则,继续你的生活,呼吸新鲜空气,放松。没关系