包含非英文文本的WordPress页面

时间:2012-06-08 作者:Albin Joseph

我有一个简单的Wordpress页面,它从用户那里获取输入并存储到数据库中。我能够获得值并正确更新数据库。然而,每当我尝试输入一些非英语文本时,它就会转换为类似“???????”的内容。但问题只是我的页面。如果我使用Wordpress评论表单,文本将正确存储在数据库中。

我的完整代码位于http://pastebin.com/MDLJBXpQ

请帮忙。

3 个回复
SO网友:fuxia

在您的wp-config.php 正确设置编码常数:

define( \'DB_CHARSET\', \'utf8\' );
define( \'DB_COLLATE\', \'utf8_general_ci\' );
并添加accept-charset 表单属性:

<form 
    name="frm" 
    method="post" 
    action="<?php bloginfo(\'url\'); ?>/message/" 
    accept-charset=\'utf8\'
>

SO网友:MathSmath

由于这是一个自定义表,请确保该表的编码设置为UTF-8。如果手动创建该表,即使在配置文件中显式声明了UTF-8编码,也可能是使用不同的编码创建的。(也就是说,我认为WordPress不会根据配置设置自动转换您的表。)

此外,您应该使用WPDB\'s prepare method 参数化查询。这有助于防止SQL注入。因此,您的查询应该如下所示:

$result = $wpdb->query( $wpdb->prepare( "INSERT INTO message (username, message) VALUES (%s, %s)", $name, $message) );

SO网友:Kirill Fuchs

这是因为您的字符集和排序规则不是utf8、utf8\\U general\\U ci。

要解决此问题,您有几个选项:1)(推荐且最简单)使用phpMyAdmin更改排序规则,这是一项相当简单的任务。根据您使用的版本,下面是3.4.5版的操作方法:在左侧面板上登录phpmyadmin时,您将看到您的数据库,请选择您用于wordpress的数据库。然后,您将看到同一面板中的所有表格,选择要编辑的表格。然后可以单击顶部菜单上的“操作”,并在“表选项”中更改排序规则。

2) 可以为整个数据库设置新的默认值。

3) 重新创建表设置默认字符集和排序规则如下所示:

$sql = "CREATE TABLE $my_table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
message TEXT NOT NULL,
)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;";

require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql);
我建议如果您创建一个主题或插件,您可以为您的表设置一个默认的字符集和排序规则。

结束

相关推荐