We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6158
    • 224 Posts
    こんばんは。

    Quote from: ssmk at Nov 30, 2006, 02:33 AM

    自分の環境でもうまく出来ました。
    原因追及は後にして、取り敢えず動くようになっておめでとう。


    Quote from: ssmk at Nov 30, 2006, 02:33 AM

    " ’ < とかの記号の扱い方の問題ナンですかね。
    どうかなぁ。

    ’<’ の影響を考え、私も <[email protected]> というのを含ませて出力さ
    せてみましたが、問題なく表示されていたので、その可能性を消していました。

    但し、ファイルと php の文字コードを何にしているかによって内部でどう扱わ
    れているのか、ちょっと気になっています。ちなみに、私の環境では全て
    UTF-8 で、バージョンは 5.1.2 です。
      • 33488
      • 429 Posts
      PHPのバージョンの違いはありそうな・・・
      こっちもUTF-8です。

      あ、あと 上にあげたソースの一部
      $headers = mb_encode_mimeheader("From: $from <$from_email>","ISO-2022-JP", ’B’, "\r\n");
      にしないと、ヘッダ部分が本文に出てきてしまいました(^^;;
        • 28314
        • 48 Posts
        おはようございます。今日も徐々に追加していきます。

        [環境]
        WinXP
        PHP Version 5.1.6
        UTF-8 のつもりだけどよくわかんないでっす
        MySQLの方はphpMyAdminから見ると
        lochal_host は 文字セット: UTF-8 Unicode (utf8)
        しかし、至るtableにて照合順序が latin1_general_ci になってます。
        SQL(←よく知らないのですが)で保存すると
        -- テーブルの構造 `modx_user_messages`-- 
        CREATE TABLE `modx_user_messages` (
          `id` int(10) NOT NULL auto_increment,
          `type` varchar(15) collate latin1_general_ci NOT NULL default '',
          `subject` varchar(60) collate latin1_general_ci NOT NULL default '',
          `message` text collate latin1_general_ci NOT NULL,
          `sender` int(10) NOT NULL default '0',
          `recipient` int(10) NOT NULL default '0',
          `private` tinyint(4) NOT NULL default '0',
          `postdate` int(20) NOT NULL default '0',
          `messageread` tinyint(1) NOT NULL default '0',
          PRIMARY KEY  (`id`)
        ) ENGINE=MyISAM [color=blue] DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci[/color] COMMENT='Contains messages for the Content Manager messaging system.' AUTO_INCREMENT=2 ;

        となってるので、phpMyAdmin かMySQLの設定ファイルのどこぞを弄れば UTF8BIN に変換できると踏んでます。
        しかし、知識と時間の不足故に後回しになってます。 ZeRoさんごめんなさい。MyCfでしたっけ?設定ファイル見てみます。

        あと、php.ini において
        [b][mbstring][/b]
        output_handler = mb_output_handler	
        mbstring.language = Japanese
        mbstring.internal_encoding = UTF-8
        mbstring.http_input = auto
        mbstring.http_output = UTF-8
        mbstring.encoding_translation = On
        mbstring.detect_order = auto
        mbstring.substitute_character = none;
        mbstring.func_overload = 1

        という設定になってます。
          初心者代表 (やらいでか!http://ssmk.blogspot.com/)
          • 33488
          • 429 Posts
          my.cnfですね xampp/mysql/bin にあります。
          http://phpspot.net/php/pgMySQL4.1%8CnUTF-8%82%CC%8F%EA%8D%87.html辺りが参考になるでしょう
          XAMPPのMysqlは、修正してないとデフォルトの文字コードはlatin1になっているので、それで文字列系の参照文字コードがlatin1になっているかと思います。
          明示的にmy.cnfのデフォルトを変えるか、PHPのDB接続後にset names utf8に変更するかが必要になるかと・・確か7bitさんのHPに後者のパッチは公開されていたかと思います。

          ついでに、実験しているWindows XAMPPでのphp.iniのmb系の設定は全部コメントになってました(^^;


            • 6158
            • 224 Posts
            こんにちは。

            Quote from: ssmk at Nov 28, 2006, 10:31 PM

            ContactForm の mail()関数を echo で表示
            echo() の内容は何処に出力させているのですか? ブラウザ? ターミナル
            (cygwin/bash)? ファイル?

            もしブラウザで見ているのなら、<> のメールアドレスは見えないと思います。
            ブラウザが <> をタグだと判断してしまって見えなくなると思います。


            また別の可能性として、"<$from_email>" の ’<’,’>’ は半角文字ですか?
            全角の ’<’,’>’ だと、’<’ の後が出力時に消されてしまいました。
            スクリプトファイルの文字コードが UTF-8 でも SJIS でも。
              • 28314
              • 48 Posts
              shocked あー、そういうことですね!
              出力はブラウザでした。 あー、そっか。さすが rolleyesCusterさん。

              一応、php.iniはデフォルト値から変更し下記のように日本語対応にしたつもりです。(ただ、MySQl内のphp.iniがあるんでしたっけ? それは触れてないです)
              また、My.cnfも一週間で覚えるPHP[http://tmani.seesaa.net/article/4725522.html]を参考にそっくりやりました。シンプルでわかりやすかったので

              んん、しっかし、未だに全ての文字列系の参照文字コードがlatin1になっています。手動で変換しないといけんのかな
              この設定を変えることにより全部が修正されると思ってたのですが。 :’(

              今日はじめて使用したマネージャの中の
              [リソース⇒ ファイル管理]
              からソースファイル見てみると、すべての日本語が文字化けしてるんですよね。 undecided

              どうファイル管理の画面から日本語を正しく編集し直して保存して再度中身をみても、やっぱり文字化け。 >:(
              MySQL の modxテーブル のデータの中身(ユーザ登録情報とか)も全部文字化けし、更にバックアップした modx.sql も全ての日本語が文字化け。

              一応、マネージャーから見る分にも、サイトの表示にも全く問題はないのが今のところなのですが、
              検索とかで引っかかることや、将来的に大事になりそうだと感じています。
              が、対応がわからずやるだけのことやってみたつもりで、ちと疲れまちた tongue

              なんか基礎的な面(PHPやMySQLやエンコード)になってしまいそうですみません。あらたにスレッドを立てたほうがいいのか
              (ContactFormというより言語環境について)ちょっと迷ってます。

              まだ、皆さんの掲示板の内容にしっかりとついていけなくてすみません。なんとか手探りながら頑張ります。
              (土日は作業は全く進めないので月曜以降の報告になります m(_ _)m & 読み辛い文面でごめんなさい)
                初心者代表 (やらいでか!http://ssmk.blogspot.com/)
                • 28314
                • 48 Posts
                まだ、答え出てないのですが、ここに書き込まれた内容をまだ、消化不足なので少々お待ちください。
                せっかく頂いた助言を流してしまいそうなので、一つひとつ確かめていけたらと思ってます。

                また、結果が上がり次第、順次あげさせていただきます。
                  初心者代表 (やらいでか!http://ssmk.blogspot.com/)
                  • 28314
                  • 48 Posts
                  先回の文字化けの件はまだ進展せず、です。私の全般的なスキル不足もあると考え、全般の知識を高めながら解決していこうと思います。

                  さて本題のContactFormですが、SQL上の modx_web_user_attributes の項目を増やしています。
                  そこでいまつまずいているのが、
                  たとえば web_userにフリガナ(furigana)という項目を追加したいのですが、まず、

                  SQL上に
                  modx_web_user_attributes テーブルに
                  furigana フィールドを作成

                  assets/snipetts/weblogin/websignup.inc.php内の
                  fullname関連に追従する形で
                  furiganaを追加して言ったのですが
                  	$modx->invokeEvent("OnWebSaveUser",
                  			array(
                  				"mode"			=> "new",
                  				....
                  				"userfullname"	=> $fullname
                  				"???????"	=> $furigana
                  				));

                  で詰まりました。
                  invokeEvent に関しても OnWebSaveUser に関しても調べても今一歩わかりません。
                  文字化けしているのですがMySQLには登録されているようなのですが
                  上記はどういった意味合いのところなのでしょうか?
                  "mode"=> "new","upd"からしてみるとDBへの書き込みだとは思うのですが。

                  また、マネージャー側で項目を追加させるようなことは危険なのでしょうか?(本体を弄ることになるので)
                    初心者代表 (やらいでか!http://ssmk.blogspot.com/)
                    • 33488
                    • 429 Posts
                    invokeEvent自体は、ほかのプラグインに"OnWebSaveUser”というイベントを通知する機能なので、使っているプラグインがなければ、追加しなくてもよいかと思います。
                    やるとしたら、"furigana" => $furigana かなぁ

                    今のところ、OnWebSaveUserをフックしているプラグインはないんじゃないかと思います。

                    WebSignupのスニペットと後はコアのWebUser周りも修正が必要かも知れません。
                      • 28314
                      • 48 Posts
                      ちょっと、混乱してました。下記の件は WebSignup でした。失礼しました。
                      From:<名前> [email protected] これは未だ解決ならず ⇒ windows固有の問題と思い込んで諦める(来年

                      php.iniに頼らずコードを以下に修正したら問題解決しました。(まんまなんですけど、php.iniに一切頼らず)

                      // encode settings
                      mb_language( "ja");
                      mb_internal_encoding( "UTF-8");
                      赤を修正
                      $headers = "From: $from_email\r\n"."Content-type: text/html;charset=utf-8\r\n";
                      $headers = "From: $from_email\r\n"."Content-type: text/html;charset=ISO-2022-JP\r\n";

                      mail($to, $subject, $body, $headers)
                      mb_send_mail($to, $subject, $body, $headers)

                      で完璧に解決しました。
                      どこか、php.ini を信じたいところがあって最後までmail()でやろうとしていたのですが、タイトルの頭が欠けてしまう等不具合が生じて胃いました。しかし、mb_send_mailに変更することで完璧に解決しました。

                      ZeRoさん、Custerさん他、皆様ありがとうございました。また、SQL周りの文字化け、項目の追加等、なにか成果が上がりましたらあげます。

                      P.S それにしても何のためのiniなんだ?と言いたくなるところだけご、私の設定が間違ってるのでしょうね。多分。


                      <追加です>
                      websignup.inc.php のWEBサインインのスニペットもコードを追ってみたところ
                      weblogin.common.inc.php の共通部でmail()関数を使用しています。
                      上記のファイルの内容を以下のように修正。
                      function webLoginSendNewPassword($email,$uid,$pwd,$ufn){
                      // encode settings
                      mb_language( "ja");
                      mb_internal_encoding( "UTF-8");
                      	.
                      	.
                      	.
                      $message = mb_convert_encoding( $message , "ISO-2022-JP");
                      if(!mb_send_mail($email, $emailsubject, $message, "From: ".$emailsender."\r\n"."X-Mailer: Content Manager - PHP/".phpversion())) {

                      で、件名の文字化けがなくなりました。


                      もしかしたら、MySQLまわりの文字化けもこれに起因するものではないかと考えています
                        初心者代表 (やらいでか!http://ssmk.blogspot.com/)