RSS チャネルからデータを取得し、サニタイズしてデータベースに保存しています。Java、tidy、MySQL、および JDBC を使用しています。
手順:
- RSS レコードを取得します。大丈夫です。
- html を tidy でサニタイズします。ここに 1 つの変換があります。Tidy は、「そうはありません」のような文字列を「そうはありません」に自動的に変換します。
- この文字列をテーブルに保存します
MySQLスキームは
CREATE TABLE IF NOT EXISTS `rss_item_safe_texts` (
`id` int(10) unsigned NOT NULL,
`title` varchar(1000) NOT NULL,
`link` varchar(255) NOT NULL,
`description` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
JDBC接続URLは
connUrl = "jdbc:mysql://" + host + "/" + database + "?user=" + username + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8";
Javaコードは
PreparedStatement updateSafeTextSt = conn.prepareStatement("UPDATE `rss_item_safe_texts` SET `title` = ?, `link` = ?, `description` = ? WHERE `id` = ?");
updateSafeTextSt.setString(1, EscapingUtils.escapeXssInjection(title));
updateSafeTextSt.setString(2, link);
updateSafeTextSt.setString(3, EscapingUtils.escapeXssInjection(description));
updateSafeTextSt.setInt(4, itemId);
updateSafeTextSt.execute();
updateSafeTextSt.close();
その結果、データベースに「それで?ありそうもない」のような壊れた文字が表示されます。同じように、Web ページ (utf-8 ページ) にテキストを出力します。