我有一个API来获取位置。
使用web浏览器,它显示:
<placeID>5</placeID>
<placeName>!@#$%&*?/_"'()-+;</placeName>
<rating>0</rating>
<categoryID>2</categoryID>
</place>
使用HttpGet并输出到控制台,它显示:
<place>
<placeID>5</placeID>
<placeName>!@#$%&*?/_"'()-+;</placeName>
<rating>0</rating>
<categoryID>2</categoryID>
</place>
在Android上显示placeName,显示!@#$%
我将原始字符串存储在数据库中,并在API中使用htmlspecialchar($placeName)。
问题与?~='^[]{}<>:);):(:'(:o:P:$:S
相同,它在控制台中变成?~='^[]{}<>:);):(:'(:o:P:$:S
,在Android上变成?~='^[]{}
。
我想在Android上显示所有特殊字符,就像它存储在数据库中一样
web浏览器显示第一个结果(未显示),因为它正在转换&;到&用于显示。如果你在浏览器中执行"查看源代码",你会发现它实际上是&;就像HttpGet一样。这正是你想要发生的事情;您在控制台中看到的内容是正确的。
也就是说,在Android中输出该字符串应该不会有任何问题,因为它显然是正确转义的。因此,问题很可能出现在您的解析器中,如以下线程中所示:Android SAX解析器无法从标签之间获取全文
即使您没有使用SAXParser,您的解析代码也是此时应该查找问题的地方,而不是输入的数据
为了安全起见,请尝试在API中使用带有htmlspecialchars的ENT_QUOTES标志,尽管在这种特定情况下这似乎不是问题所在。
我还应该提到,一旦你解决了这个问题,根据你在Android上显示文本的方式,它可能会像在控制台中一样显示为escaped,在控制台中你会看到类似&;而不是&。如果是这种情况,那么您将需要像以下线程中那样解码XML中的字符串:Java:How to unescape HTML character entities in Java?