【Plugin】FormLoom 2 の ¥ 記号問題をかなり解決してみた&MySQL文字化け対策

以前、FormLoom の ¥ 記号問題をなんとなく解決してみたという記事を書きましたが、もう少し分かった事がありますので書いておきます。

FormLoom の ¥ 記号問題とは

FormLoom、FormLoom 2 ともに普通にアップロードするとPHPエラーが出て機能しません。

そもそも、半角 \ (バックスラッシュ…英数 を押して option + ¥)は、ユニコードで U+005C というコードが割り振られていて、日本語フォントによっては半角 ¥ に置き換えられて表示されるみたいです。
ですので、見た目は \¥ であっても、内部的には U+005C というコードになっている訳です。

しかし、RapidWeaver か FormLoom のどちらか分かりませんが、FormLoom をアップロードする際、内部的にもう一つの円記号 U+00A5 というユニコードに置き換えられてしまうのがこの問題のやっかいなところでした。


対策1 応急処置

フォームをアップロードしたら、以下のファイル内の ¥ 記号をすべて \ に編集することでメールフォームが正常に機能します。

フォームのフォルダ名/files/formloom-page数字.php

この方法では、フォームをアップロードする度に修正が必要なので結構面倒です。


対策2 おすすめ処置

アップロードしたファイルをその度に修正するなら、アップロード前のファイルを修正すればいいのでは?と考えた方法です。

FormLoom の場合

/ユーザー名/ライブラリ/Application Support/RapidWeaver/FormLoom.rwplugin/Contents/Resources/formloom_tpl.txt

を開いて、formloom_tpl.txt の中の ¥ 記号を \(バックスラッシュ)にすべて置き換えます。

FormLoom 2 の場合

/ユーザー名/ライブラリ/Application Support/RapidWeaver/FormLoom2.rwplugin/Contents/Resources/formloom_php_tpl.txt

を開いて、formloom_php_tpl.txt の中の ¥ 記号を \(バックスラッシュ)にすべて置き換えます。

ただしこの方法は編集の際に注意点があります。

UTF-8 で保存しない

ユニコードは UTF-8 という文字コードとセットという知識があったので、当然 UTF-8 で保存しそうですが今回は該当しませんでした。(そのせいで無駄な時間を費やしてしまいました…)
元のファイルを修正して UTF-8 で保存すると、アップロードされたファイルは U+00A5の方の ¥ 記号に置き換わってしまいます。

まったく意味がわかりませんが、これを回避するには…

  • 該当ファイルを文字コード Japanese(MacOS) で開く(もしくは開いた後に変換する。他の日本語文字コードでもいいかもしれません。)
  • 半角 ¥ を 半角 \ に修正
  • 文字コード Japanese(MacOS) のまま保存
これでアップロードされたPHPファイルは正常に機能します。なぜこうなるのか仕組みをまったく理解出来ていません(笑)
アップロードされたPHPファイルの文字コードは UTF-8 になっていました。これも意味不明…。
とりあえず、これで面倒な作業から解放されると思います。


FormLoom 2 の MySQL 日本語文字化け対策

この解決方法は、Nさんから頂きました。ありがとうございました!

解決方法

/ユーザー名/ライブラリ/Application Support/RapidWeaver/FormLoom2.rwplugin/Contents/Resources/formloom_php_tpl.txt

を開いて、以下の部分を探して下さい。

//=====================================================//
// ! - SAVE TO MYSQL
//=====================================================//

if($fl['save_to_mysql'] == "true"){
	
	// Connect to Database
	$s = @mysql_connect($fl['mysql_host'], $fl['mysql_user'], $fl['mysql_password']);
	$d = @mysql_select_db($fl['mysql_db'], $s);

この部分を次のように編集します。(最後に1行追加するだけです)

//=====================================================//
// ! - SAVE TO MYSQL
//=====================================================//

if($fl['save_to_mysql'] == "true"){
	
	// Connect to Database
	$s = @mysql_connect($fl['mysql_host'], $fl['mysql_user'], $fl['mysql_password']);
	$d = @mysql_select_db($fl['mysql_db'], $s);
	@mysql_query("SET NAMES UTF8");

これで、MySQLの日本語文字化けを回避する事が出来ます。困っていた方は是非お試し下さい!


おまけ

作業は順調です。
FormLoom 2FormLoom 2
ページインスペクタ (FormLoom 2)
blog comments powered by Disqus