可以';t显示从XML中获得的特殊字符


Can't show the special characters which is got from XML

我有一个API来获取位置。

使用web浏览器,它显示:

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

使用HttpGet并输出到控制台,它显示:

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

在Android上显示placeName,显示!@#$%

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

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

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

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

也就是说,在Android中输出该字符串应该不会有任何问题,因为它显然是正确转义的。因此,问题很可能出现在您的解析器中,如以下线程中所示:Android SAX解析器无法从标签之间获取全文

即使您没有使用SAXParser,您的解析代码也是此时应该查找问题的地方,而不是输入的数据

为了安全起见,请尝试在API中使用带有htmlspecialchars的ENT_QUOTES标志,尽管在这种特定情况下这似乎不是问题所在。

我还应该提到,一旦你解决了这个问题,根据你在Android上显示文本的方式,它可能会像在控制台中一样显示为escaped,在控制台中你会看到类似&amp;而不是&。如果是这种情况,那么您将需要像以下线程中那样解码XML中的字符串:Java:How to unescape HTML character entities in Java?