WordPress Amazon Associates Link Builder リンク日本語文字化け対策
Amazon Associates Link Builder を使って、WordPressにアソシエイトのリンクを張っているのですが、いつの間にか文字化けするようになってしまいました。原因が、MariaDB(MySQL)のアップグレードのせいなのか、php7.1のアップグレードのせいなのか、わかりませんが、これまでのAmazonのリンクの日本語が全部「?????」という文字に化けてしまいました。いろいろやっていて直ったので、載せておきます。ただ、どれが効果があったのか分かりませんが、下記の設定をしているうちに直りました。※設定を変えてもブラウザ上の表示はすぐには反映されず、数時間放置していたら直っていました。キャッシュか何かで更新に時間がかかるようです。
■MariaDB(MySQL)のデーターベースの文字設定を変更する。
・mysql起動
[root@centos7 ~]# mysql
・現状の確認
MariaDB [(none)]> show variables like “chara%";
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 |←utf8になていない | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 |←utf8になていない | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.001 sec)
MariaDB [(none)]> show databases;
MariaDB [(none)]> show create database `ワードプレスのデータベース名`;
+------------------+------------------------------------------------------------------------------+ | Database | Create Database | +------------------+------------------------------------------------------------------------------+ | wordpress_name | CREATE DATABASE `wordpress_name` /*!40100 DEFAULT CHARACTER SET latin1 */ |←utf8になっていない +------------------+------------------------------------------------------------------------------+ 1 row in set (0.000 sec)
・ワードプレスのデータベースの文字コードをutf8mb4に変更する。
MariaDB [(none)]> ALTER DATABASE `ワードプレスのデータベース名` default character set utf8mb4;
MariaDB [(none)]> show create database `ワードプレスのデータベース名`;
+------------------+------------------------------------------------------------------------------+ | Database | Create Database | +------------------+------------------------------------------------------------------------------+ | wordpress_name | CREATE DATABASE `wordpress_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |←変わった +------------------+------------------------------------------------------------------------------+ 1 row in set (0.000 sec)
・ワードプレスのデータベース内のテーブルについて確認してみた。
MariaDB [(none)]> SHOW TABLE STATUS FROM ワードプレスのデータベース名;
・wp_Aalb_Asin_Responseという名前のテーブルの文字コードがlatin1だったので、これもutf8mb4にしてみた。
MariaDB [(none)]> ALTER TABLE wp_Aalb_Asin_Response CONVERT TO CHARACTER SET utf8mb4;
■character_set_databaseの文字コードが変わらなかったので、server.cnfで直接設定してみた。
[root@centos7 /etc/my.cnf.d]# vi server.cnf
[mysqld]
character-set-server=utf8mb4 ←追加
・mysqlの再起動
[root@centos7 ~]# systemctl restart mysql.service
・確認
[root@centos7 ~]# mysql
MariaDB [(none)]> show variables like “chara%";
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.001 sec)
MariaDB [(none)]> exit
■php.iniの設定を変更
[root@centos7 /etc]# vi php.ini
[mbstring] ; language for internal character representation. ; This affects mb_send_mail() and mbstring.detect_order. ; http://php.net/mbstring.language ;mbstring.language = Japanese mbstring.language = Japanese ; Use of this INI entry is deprecated, use global internal_encoding instead. ; internal/script encoding. ; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) ; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. ; The precedence is: default_charset < internal_encoding < iconv.internal_encoding ;mbstring.internal_encoding = mbstring.internal_encoding = UTF-8 ; Use of this INI entry is deprecated, use global input_encoding instead. ; http input encoding. ; mbstring.encoding_traslation = On is needed to use this setting. ; If empty, default_charset or input_encoding or mbstring.input is used. ; The precedence is: default_charset < intput_encoding < mbsting.http_input ; http://php.net/mbstring.http-input ;mbstring.http_input = mbstring.http_input = pass ; Use of this INI entry is deprecated, use global output_encoding instead. ; http output encoding. ; mb_output_handler must be registered as output buffer to function. ; If empty, default_charset or output_encoding or mbstring.http_output is used. ; The precedence is: default_charset < output_encoding < mbstring.http_output ; To use an output encoding conversion, mbstring's output handler must be set ; otherwise output encoding conversion cannot be performed. ; http://php.net/mbstring.http-output ;mbstring.http_output = mbstring.http_output = UTF-8 ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ; http://php.net/mbstring.encoding-translation ;mbstring.encoding_translation = Off mbstring.encoding_translation = On ; automatic encoding detection order. ; "auto" detect order is changed according to mbstring.language ; http://php.net/mbstring.detect-order ;mbstring.detect_order = auto mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another ; http://php.net/mbstring.substitute-character ;mbstring.substitute_character = none mbstring.substitute_character = none
・httpd再起動
[root@centos7 ~]# systemctl restart httpd.service
■Amazon Associates Link Builderのphpファイル変更
[root@centos7 /home/ユーザー/public_html/wordpress/wp-content/plugins/amazon-associates-link-builder/sql]# vi sql_helper.php
public function create_table( $columns, $index = array(), $primary_key = "" ) {
if ( $this->table_not_exists( $this->database_name, $this->table_name ) ) {
$columns_param = implode( ", ", $columns );
$index_param = ! empty( $index ) ? ", KEY " . implode( ", KEY ", $index ) : "";
$primary_key_param = ! empty( $primary_key ) ? ", PRIMARY KEY $primary_key" : "";
$parameters = $columns_param . $index_param . $primary_key_param;
//$create_table_query = "CREATE TABLE {$this->table_name} ( $parameters )";
$create_table_query = "CREATE TABLE {$this->table_name} ( $parameters ) CHARACTER SET = utf8mb4";
//To use dbDelta function
require_once( ABSPATH . "/wp-admin/includes/upgrade.php" );
dbDelta( $create_table_query );
}
}
■変更後すぐにはブラウザに適用されなかったのでしばらく放置。
ディスカッション
コメント一覧
まだ、コメントがありません