質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

2541閲覧

文字コードの変更について

H-K-S

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/09/07 05:29

Moodleを使用したサイト構築を行っていて、どこかのサイトを参考に文字コードをUTF-8からutf8mb4に変更しました。
具体的には /etc/my.cnf に以下の記述を加えました。

[client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

[mysql]
default-character-set = utf8m

すると以下のようなエラーが表示され、webサイトで文字が表示できなくなりました。

Warning: htmlspecialchars(): charset `UTF-8mb4' not supported, assuming utf-8 in /var/www/html/moodle/lib/weblib.php on line 100

エラー文で指定されたweblib.phpの86~101行目が以下になります。

/**

  • Add quotes to HTML characters.
  • Returns $var with HTML characters (like "<", ">", etc.) properly quoted.
  • Related function {@link p()} simply prints the output of this function.
  • @param string $var the string potentially containing HTML characters
  • @return string

*/
function s($var) {

if ($var === false) { return '0'; return preg_replace('/&amp;#(\d+|x[0-9a-f]+);/i', '&#$1;', htmlspecialchars($var, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE));

}

下手に変更を加えてしまったのですが、修正の仕方がわかりません。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

utf8mb4という文字コードはMySQL特有のエンコード名であって、MySQL外のPHPなどでは「単なるUTF-8」です(MySQLでutf8と書くと1文字3バイトしか取られないものになるために、それと区別するための名前です)。

my.cnfやMySQLへの接続時の指定などはともかく、それ以外のPHPサイドでutf8mb4という名前は使いません。php.iniなどPHPサイドの設定はUTF-8とだけ書いてください。

投稿2020/09/07 05:35

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H-K-S

2020/09/07 05:55

回答ありがとうございます。php.iniの中身は触っていないのですが、どこを修正したらよいですか?
maisumakun

2020/09/07 05:59

「UTF-8mb4」という名前をどこかに書いていませんか?それがありましたら、単なる「UTF-8」に直してください。
H-K-S

2020/09/07 06:06

わかりました。ありがとうございます。
guest

0

htmlspecialchars()の第3引数に'UTF-8'を指定してみては如何でしょうか。

投稿2020/09/07 05:32

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H-K-S

2020/09/07 05:55

回答ありがとうございます。具体的にどのように記述すればよいですか?
m.ts10806

2020/09/07 05:59

逆に、この回答で何が分からないのでしょう。 「htmlspecialchars()に問題が出ている(エラーの通り)」 その「第3引数に指定してみてはどうか」という回答なのですが。 PHPの基礎から必要でしたら、もう少し勉強してからでないとMoodleの環境壊すだけになると思います。
H-K-S

2020/09/07 06:06

すみません、勉強しながらの作業なのでまだわからないことが多いです。ありがとうございました。
m.ts10806

2020/09/07 06:07

使い方含めて回答にPHPマニュアルのリンクを含めています。せめどうかそちらは確認してください。
guest

0

自己解決

php.iniの中でデフォルトコードがutf8mb4に変更されていました。
そこを直すと解決できました。ありがとうございました。

投稿2020/09/09 04:36

H-K-S

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問