2010-03-08 129 views
1

问题使用html_entity_decode函数对特殊字符 进行解码后,我用空格替换 实体。我的问题是,当我检查,如果if ($decoded_str[5] == ' ')这是不正确的,但在$decoded_str[5]存在,这是 解码前的空间。如何解决此事?我需要能够检查它像这样:if ($decoded_str[5] == ' ')使用html_entity_decode进行解码,然后出现 

+0

这个问题没有任何意义......我们是如何得到一个数组出html_entity_decode功能??? – animuson 2010-03-08 19:42:06

+0

你的意思是哪个数组? – AleGore 2010-03-08 19:43:51

+0

你说说它的方式,'$ decoded_str [5]'是一个包含有空格,没有一个空格的字符串。所以说'$ decoded_str [5] =='“'总是会返回false,因为字符串不是一个单一的空间,是否正确? – animuson 2010-03-08 19:46:06

回答

4

NBSP有0XA0的字符代码,空间为0x20。

根据您的编码,你可能需要比较(ISO-8859-1 /默认)

if ($decoded_str[5] === '\xa0') 

或(UTF-8)

if ($decoded_str[5] === '\xc2' && $decoded_str[6] === '\xa0') 

从手动html_entity_decode

注:您可能想知道为什么trim(html_entity_decode(' '));不会将字符串还原为空字符串,这是因为' '实体在默认ISO 8859-1字符集中不是ASCII码32(其被剥离trim()),而是ASCII码160(0xa0)。

1

这是因为 不是空间:这是一个Non-breaking space

这意味着它的字符代码不是0x20,但0xA0(当然,当然,这取决于字符集,我想...)

+0

0X0A是一个'\ N' .... – kennytm 2010-03-08 19:45:27

+0

@Kenny> ergh;一个帖子中有一个错字,它就是它不能的地方;-(感谢评论:我纠正了这一点:-) – 2010-03-08 19:48:47

0

这是正确的行为,因为html_entity_decode将所有适用的HTML字符,所以也&,所以你能确定使用此检查空间..

if (htmlentities($dec) == ' ') 

这基本上是用字符串的原始值的比较...

+0

解码功能不会返回空格... – Marcx 2010-03-08 20:01:21