我有一个PHP脚本,可将值从网上商店存储到MySQL数据库。该商店允许客户留下一条消息,当他们使用表情符号时会造成严重破坏。为了防止这些字符破坏我的脚本,在将所有字符串发送到MySQL之前,我在所有字符串上都使用了FILTER_SANITIZE_STRING
和FILTER_FLAG_STRIP_HIGH
。
这很好用,除了当我在编写的Java程序中再次显示它时,我将得到"I'm"
而不是"I'm"
之类的东西。
有没有办法让Java查找并将ASCII值转换回字符?
我当前的攻击计划是拥有一个获取每个相关字符串列,检查每个单词以寻找&#
,在&#
之后找到simi冒号的位置,替换该值的功能。带有相应的ASCII字符,并返回新字符串。
这是可行的,但是我希望有一种现有的方法可以在不重新发明轮子的情况下进行操作。
编辑:感谢@rzwitserloot向我指出正确的方向,对于任何看到此内容但未在其答案中阅读我的评论的人,我最终使用了JSoup。这是Java方面与此相关的最终代码部分的片段,供其他从事此工作的人使用:
// Connect method opens a connection to the MySQL server
connect();
// Query the MySQL server
resultSet = statement.executeQuery("select * from order_tracking order by DateOrdered");
// If there is any result, iterate through them until the end is reached.
while (resultSet.next()) {
// Add each returned row into the list to send to the table
Jsoup.parse(resultSet.getString(2)).text()
.
.
.
}
.text()
末尾的Jsoup.parse(String)
摆脱了Jsoup自动抛出的html格式(即<Head><Body>
等),并且仅返回带有{{1 }}(或任何可能的ascii值)正确格式化。
谢谢!
答案 0 :(得分:1)
最好的解决方案是只修复初始位:当然数据库(通常是mysql)可以存储表情符号,但是mysql很奇怪。 utf8不是utf8,它的名字是错误的。 mysql中真正的utf8称为utf8mb4。使用该编码,就可以存储笑脸了。
如果该选项对您不起作用,则您的字符串是HTML编码的。解决方案是对它们进行HTML解码。 Java没有开箱即用,您需要一个依赖项。例如:http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#unescapeHtml4(java.lang.String)
答案 1 :(得分:0)
您的数据库中包含HTML转义的实体。这并不理想,但是很容易逆转。将字符串传递到html_entity_decode()
以撤消该过程。