我使用htmlentities()
将数据存储在我的MySQL数据库表中,但我发现这是inadvisable,所以我要更改它。
我现在以原始格式存储数据(使用PDO预处理语句),并在输出时根据需要进行转换。在某些情况下,我希望数据以HTML格式输出。
我所有使用HTML输出的网页的字符集都设置为utf-8。但是我注意到this post那张海报上的Mythli评论说," 没有必要[输入数据库使用] htmlspecialchars()因为你想要显示html而不需要[输入]使用] htmlentities(),如果您的网站的字符集与您在数据库中使用的字符集相同。"
我注意到我的数据库表似乎有"默认字符集"设为latin1。
我应该将其更改为" utf8" ?
答案 0 :(得分:1)
是的,如果要在数据库中存储UTF-8数据,则应将它们存储在UTF-8表/列中。否则,有两种情况:
SET NAMES utf8
)。如果应该存储数据的列被设置为存储latin1,MySQL将正确处理编码并将您的输入从UTF-8转换为latin1。这会导致丢失latin1无法表示的所有字符。因此,最好告诉您的数据库您要将UTF-8存储在UTF-8列中,并且您将获得数据的干净往返。另请参阅Handling Unicode Front To Back In A Web App。
答案 1 :(得分:0)
是的,但MySql有几个级别,其中charset可能不同,而整理实际上并不是最重要的级别
清单以确保工作正常:
1)table 列整理(你要存储html的字段)应该使用utf-8
2)您与数据库的连接。以下内容涉及多个问题:
mysqli_query("SET NAMES 'utf8'");
3)如你所说,改变数据库和表的默认字符集也是一个好主意。 您可能希望排序规则不区分大小写(utf8_unicode_ci)
4)在插入非拉丁字符之前,这一切都不重要,所以没有测试就没有意义。
这是一个很好的细分,哪些值要保持一致,以及要测试的字符串: http://adviesenzo.nl/examples/php_mysql_charset_fix/
当Iñtërnâtiônàlizætiøn以它进入的方式出现时,你就明白了。