RadPHP XEのサンプルプログラム BlogProject の文字化け対策

RadPHP XEのサンプルプログラムの一つ「BlogProject」で、登録した文字が文字化けする問題に手間取った。

同じ問題で悩んでいる人がいるかもしれないので、修正方法を書いておきます。

まずMySQLの設定ファイル my.ini を編集して、文字コードの設定を行います。
これは「BlogProject」に限らない一般的な話。

データベースを作成するときに文字コードをUTF-8に設定します。

CREATE DATABASE eblogs DEFAULT CHARACTER SET utf8;

データベースのテーブル定義は、blog_tables.sqlにSQLがあります。
なぜかblogsテーブルのTitleフィールドとContentフィールドに文字コードが「latin1_general_ci」と設定されています。

`Title` varchar(128) collate latin1_general_ci NOT NULL,
`Content` text collate latin1_general_ci NOT NULL,

この設定は不要なので、削除します。
※これに気づくのに時間がかかりました。

`Title` varchar(128) NOT NULL,
`Content` text NOT NULL,

blog_db.phpのDatabase1コンポーネントの設定ですが、「Delphi for PHP で MySQL を使う際の言語設定について | ゆめとちぼーとげんじつと」で、OnAfterConnectイベントで文字コードを設定するSQLを発行する例を見つけました。

function Database1AfterConnect($sender, $params)
{
    $this->Database1->execute('SET NAMES utf8;');
}

Database1コンポーネントにCharsetプロパティがあります。
いかにも文字コードに関係がありそうなプロパティですが、具体的に何をしているのかわかりませんでした。
上記の「SET NAMES utf8」と同じことをしてくれそうで、してくれないようです。

ということで、Database1コンポーネントは、OnAfterConnectイベントで文字コードの設定を行います。

Pageクラスを継承しているadmin_edit.phpなどのEncodingを「Unicode(UTF-8)」に変更します。
※一括して変更する方法はないのでしょうか。

admin_edit.phpのOKボタン(Button1コンポーネント)のOnClickイベントを修正します。

  $content = textToHtml($this->Memo1->Text);

この行を編集し、文字コードを引数で渡します。

  $content = textToHtml($this->Memo1->Text, 'UTF-8');

addcomment.phpとadmin_edit_comment.phpのtextToHtmlも同様の修正を行います。

以上で、一応、日本語を入力して、表示されるようになりました。

※まだ、不満のある動作がありますが…

コメント

  1. 高橋智宏さま
    コメントありがとうございます。
    教えていただいたページを見て勉強します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください