【发布时间】:2019-01-21 14:02:32
【问题描述】:
我有一个 PHP 脚本,可以将值从网上商店存储到 MySQL 数据库。该商店允许客户留言,当他们使用表情符号时可能会造成严重破坏。为了防止这些字符破坏我的脚本,我在所有字符串上使用了FILTER_SANITIZE_STRING 和FILTER_FLAG_STRIP_HIGH,然后将它们全部发送到 MySQL。
这很好用,除了当我在我编写的 Java 程序中再次显示它时,我会使用 "I'm" 而不是 "I'm"。
有没有办法让 Java 找到 ASCII 值并将其转换回字符?
我目前的攻击计划是有一个函数,它获取每个相关的字符串列,检查每个单词以查找 &#,找到 &# 之后的分号位置,用相应的 ASCII 替换该值字符,并返回新的字符串。
这是可行的,但我希望有一种现有的方法可以做到这一点,而无需重新发明轮子。
编辑:感谢@rzwitserloot 为我指明了正确的方向,对于任何看到这个但没有在他的回答中阅读我的评论的人,我最终使用了JSoup。以下是 Java 端与此相关的最终代码部分的 sn-p,供其他人使用:
// 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()
.
.
.
}
Jsoup.parse(String) 末尾的.text() 摆脱了 Jsoup 自动抛出的 html 格式(即<Head><Body> 等),并仅返回带有&#38; 的文本部分(或任何 ascii 值)可能)格式正确。
谢谢!
【问题讨论】:
-
看到这个answer 看起来编码是可选的所以也许不这样做?
-
你的数据库的字符集是什么?如果您使用
utf8mb4,您也应该能够存储表情符号。如果那是正确的字符集,您可能需要使用参数化查询 -
@user3783243 我的数据库的字符集是 utf8_general_ci。我目前正在使用参数化查询。
-
您看到的是
"I&#39m"还是"I&#39;m"?也就是说,您在问题中是否遗漏了分号,还是缺少分号? -
@ScaryWombat,当我不过滤掉表情符号时,插入命令会失败。我会查看您提供的链接