2012-07-28 62 views
0

我有一个获取位置的API。无法显示从XML中获取的特殊字符

使用Web浏览器,它显示:

<placeID>5</placeID> 
<placeName>[email protected]#$%&*?/_"'()-+;</placeName> 
<rating>0</rating> 
<categoryID>2</categoryID> 
</place> 

使用HTTPGET和outputing安慰,它表明:

<place> 
<placeID>5</placeID> 
<placeName>[email protected]#$%&amp;*?/_&quot;'()-+;</placeName> 
<rating>0</rating> 
<categoryID>2</categoryID> 
</place> 

在Android上显示地名,它显示[email protected]#$%

我将原始数据库中的字符串,并在API中使用htmlspecialchars($ placeName)。

问题与?~=\^[]{}&lt;&gt;:);):(:'(:o:P:$:S相同,它在控制台上变成?~=\^[]{}&lt;&gt;:);):(:'(:o:P:$:S,在Android上变成?~=\^[]{}

我想在Android上显示所有特殊字符,就像它存储在数据库中一样。

+0

看到这可能会帮助你http://stackoverflow.com/a/10000095/1289716 – MAC 2012-07-28 09:45:46

+0

你为什么用' htmlspecialchars()'在你存储到数据库之前? – Adi 2012-07-28 10:10:32

+0

@Adnan:不,我在DB中存储原始字符串“!@#$%&*?/ _”'() - +;“,在使用XML显示它之前,我使用htmlspecialchars(), – Emerald214 2012-07-28 10:57:35

回答

1

网络浏览器正在向您显示第一个结果(未转义),因为它正在转换& amp;到&进行显示。如果您在浏览器中执行“查看源代码”,您会看到它实际上是& amp;就像使用HttpGet一样。这正是你想要发生的事情;你在控制台中看到的是正确的。

这就是说,你不应该在Android中输出该字符串时遇到任何问题,因为它显然已被正确转义。那么,问题很可能出在你的解析器,像在这个线程: Android SAX parser not getting full text from between tags

即使你不使用的SAXParser,您的解析代码是你应该寻找一个问题,在这一点上,而不是在数据

为了安全起见,请尝试在API中使用htmlspecialchars中的ENT_QUOTES标志,虽然在这种情况下似乎并不是问题所在。

我还应该提到,一旦你解决了这个问题,取决于你在Android上显示文本的方式,它可能会像控制台一样显示出来,在那里你会看到诸如& amp;而不是&。如果是这样的话,你将需要从这个线程中解码XML的字符串:Java: How to unescape HTML character entities in Java?

+0

我使用元素,节点和org.w3c.dom包的NodeList遍历XML在Java控制台中,它显示“!@# $%&*/_ “'() - +;”?在Android logcat中显示“!@#$%”。你可以帮帮我吗? – Emerald214 2012-07-30 03:46:27

+1

没有看到你的解析代码,没有其他的东西可以帮忙。如果您仍处于开发的初始阶段,我建议修改您的API以输出JSON而不是XML(或除此之外),因为如果您使用JSONObject,则不会遇到类似的问题。 – ben 2012-08-01 16:57:09

+0

你的解决方案和这个http://stackoverflow.com/questions/11716147/why-dom-library-remove-the-escaped-special-character解决了我的问题。由于你的建议,我专注于解析代码并提出一个关于它的问题。谢谢,我会把你的建议推荐给下一个项目。 – Emerald214 2012-08-02 01:43:59