0

我有一个 API 来获取位置。

使用网络浏览器,它显示:

<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 中使用 htmlspecialchars($placeName)。

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

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

4

1 回答 1

1

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

也就是说,在 Android 中输出该字符串应该不会有任何问题,因为它显然已正确转义。因此,问题很可能出在您的解析器中,就像在这个线程中一样: Android SAX parser not getting full text from between tags

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

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

我还应该提到,一旦你解决了这个问题,这取决于你在 Android 上显示文本的方式,它可能会像在控制台中一样出现转义,你会看到像 & 这样的东西。代替 &。如果是这种情况,您将需要像在此线程中那样从 XML 中解码字符串:Java:如何在 Java 中取消转义 HTML 字符实体?

于 2012-07-28T10:32:31.957 回答