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

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

ただいまの
回答率

89.21%

sformmail2というPHPプログラムの文字化け

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,609

NP3228

score 12

ホームページでsformmail2()というPHPのメールフォームを使っているのですが、一部分だけ、どうしても文字化けをしてしまいます。

使っているサーバーはさくらインターネットのスタンダードプラン()です。

sformmail2のsformmail.phpの中に、以下の記述があり、こちらが文字化けを起こします。(PHP内69〜97行目)

// submit表示項目
function printSubmit($error)
{

    // 送信/戻るボタン表示設定
    $button_text = array(
        'send'    =>"送 信"
    ,    'back'    =>"戻 る"
    );

    if ($error == 1) {
        // エラーがある場合のHTML出力
        $submit = <<< EOD
<p class="ERR">必須項目の入力に不足があります。</p>
<input type="button" name="back" id="back" value="{$button_text['back']}" onclick="history.back()" />
EOD;
    } else {
        // 項目が正しい場合のHTML出力
        $submit = <<< EOD
<p>入力が正しければ、送信ボタンを押してください。</p>
<input type="hidden" name="mode" id="mode" value="SEND" />
<input type="submit" name="submit" id="submit" value="{$button_text["send"]}" />
<input type="button" name="back" id="back" value="{$button_text["back"]}" onclick="history.back()" />
EOD;
    }
    return $submit;
}


本来ならば、送信ボタンと戻るのボタンが出てくるといった記述のはずが、以下のように文字化けを起こしてしまいました。
イメージ説明

<h4>
<p>?ュ????罩c???????違????篆<???帥?潟???若?????????????</p>
<input type="hidden" name="mode" id="mode" value="SEND" />
<input type="submit" name="submit" id="submit" value="????篆? />
<input type="button" name="back" id="back" value="?祉????" onclick="history.back()" />
</h4>

$button_textの中に収納した「送 信」と「戻 る」が文字化けを起こし、HTMLタグに異常をもたらしてるのだと思って、文字コードを確認したところ「ASCII」だということがわかり、HTMLファイルの文字コードである「UTF-8」に合わせようと思い、以下のように変えても無駄でした。

<修正↓>

$button_text = array(
        'send'    => mb_convert_encoding("送 信", "utf-8","ASCII")
    ,    'back'    => mb_detect_encoding($button_text["send"])
    );


<結果↓>
イメージ説明

<h4>
 <p>?ュ????罩c???????違????篆<???帥?潟???若?????????????</p>
<input type="hidden" name="mode" id="mode" value="SEND" />
<input type="submit" name="submit" id="submit" value="辿??達??辰多臓" />
<input type="button" name="back" id="back" value="ASCII" onclick="history.back()" />
</h4>

色々と調べたのですが、自分では限界でした。
PHPの初心者のため、わかっていないことが多いので、足りない情報はすぐに出そうと思っています。なるべく早い返信をこころがけますので、よろしくお願いします。

追記
どのようなページか、素人ながら説明します。
sformmail.phpにアクセスすると、sfm_form.htmlのフォームを読み込み、そこに入力した後、送信ボタンを押すと、入力された情報がsfm_confirm.htmlに表示され、問題がなければ、送信ボタンが表示される、といった次第です。この二回目の送信ボタンが文字化けを起こします。

ちなみにsfm_confirm.html側の記述を↓のように変えても結果は全く変わりませんでした。

<h4>
<!--修正前:<?php echo $sfm_submit; ?> <?php $this->crCheck(); ?>-->
<?php echo mb_convert_encoding($sfm_submit, "utf-8", "auto"); ?> <?php $this->crCheck(); ?>
</h4>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+3

結論から先に言うと、ほかのソフトウェアを使うことを検討されたほうがよいと思います。


ソースコードを見てみたところ、このsformmmail2というPHPのプログラムは、内部エンコーディングにEUC-JPを前提としているようです。メインのプログラムファイル (sformmail.php) に、次の記述があります。

// 内部エンコードを設定(euc-jp 固定)
$sfm_cfg['internal_enc'] = 'euc-jp';
new SbFormMailClass($sfm_cfg);
exit;

内部エンコーディング$sfm_cfg['internal_enc']の値を、さくらインターネットでのPHPの内部エンコーディングの初期値 (UTF-8になっていると思われます) に変え、ソースファイルやHTMLファイルのすべてのエンコーディングを現状のEUC-JPからUTF-8に変えれば、あるいは動作するかもしれません (実際に確かめてはいません)。

しかしそれ以前に、EUC-JPを前提とするという、ウェブアプリケーションにしては今や古い作りであり、実際に4年以上前に更新が止まってしまってもいます。なんらかの不具合を抱えていたり、今後不具合が発見されたとしても、開発者によって修正される見込みがほぼありません

どうしても、どーうしてもこれを使わなければならない事情がないかぎり、ほかのソフトウェアを使うことを検討されたほうがよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

スクリプトの先頭に以下を追加してみてください。

mb_language("ja");
mb_internal_encoding("UTF-8");
mb_language("Japanese");


さらに出力($submitをecho)する直前に以下を追加。

header('Content-Type: text/html; charset=utf-8');

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/08 11:47

    なるほど、ありがとうございます。
    しかしmbから始まる3行だけでは、全く変わらず解決できなかったみたいです。
    何か他に考えられることがあれば、ご教授お願いします。
    何か確認するものがあれば、初心者なので時間がかかるかもしれませんが、確認しますので!

    キャンセル

  • 2016/11/08 11:54

    >挙動が乱れるのを恐れて、あまり触らないようにしてます。

    もう既に乱れてるのですから、私が提案した
    input typeの二行の変更(配列を使わずに直接テキストを書く)
    を実施してみてください。

    キャンセル

  • 2016/11/08 12:03 編集

    ご指摘の通りしてみましたが、変わらないですね。
    <修正↓>
    $submit = <<< EOD
    <p>入力が正しければ、送信ボタンを押してください。</p>
    <input type="hidden" name="mode" id="mode" value="SEND" />
    <input type="submit" name="submit" id="submit" value="送 信" />
    <input type="button" name="back" id="back" value="戻 る" onclick="history.back()" />
    EOD;

    <結果↓>
    <h4><p>?ュ????罩c???????違????篆<???帥?潟???若?????????????</p>
    <input type="hidden" name="mode" id="mode" value="SEND" />
    <input type="submit" name="submit" id="submit" value="????篆? />
    <input type="button" name="back" id="back" value="?祉????" onclick="history.back()" /> </h4>

    一体、何がどうなっているのでしょう・・・ややこしい問題ですみません・・・

    キャンセル

+1

アップロードしたファイル自身の文字コードは正しく設定されていますか?どのようなエディタを使っているかわかりませんが、エディタによっては日本語で編集した際にUTF-8ではなくSHIFT-JISで保存されることがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/08 17:42

    エディタですが、html、php共にDreamweaverCCを使っています。

    DreamweaverCCの、[修正]ー[ページプロパティ]ー[タイトル/エンコーディング]で確認する限り、エンコーディング:Unicode(UTF-8)となっています。

    さくらインターネットのファイルマネージャーでも確認がとれましたが、やはりUTF-8となっています。補足ですが、改行が「LF」種類でした。
    何か、他に確認する点などあれば、お願いします。

    キャンセル

  • 2016/11/08 17:53

    すみません、zico_teratailさんが既に指摘されていましたね。

    ダウンロードしたところ、「euc-jp」にしか対応していないメールフォームなので、別のものを探されたほうが早いと思います。

    キャンセル

-1

あとはもうsformmail.phpのソース全文と、出力されたHTMLの全文がないと判断できませんね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/08 16:00

    sformmail.phpは、下記から取ることができます。
    http://www.sapphirus.biz/php/sformmail2/

    confirm.htmlは長文となり、すみませんが以下の通りとなります。

    <!DOCTYPE html>
    <html lang="jp">
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>タイトル</title>
    <link rel="stylesheet" href="../cssjs/bootstrap.css">

    <body background="../img/bg/cnt.jpg">
    <div class="row" id="cnt">


    <form method="post" name="sfm-form" id="sfm-form" action="<?php echo $sfm_script; ?>">
    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>資料送付</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-8"><h4>
    <div class="col-4"><?php echo $sfm_html->siryo; ?></div>
    </h4></div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>相談会</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-8"><h4>
    <div class="col-4"><?php echo $sfm_html->date; ?></div>
    </h4></div><div class="clearfix"></div>


    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>お名前(ご本人)</h4>
    </div>
    <div class="col-1">
    <div class="hiss">必須</div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5"><h4>
    <div class="col-4"><?php echo $sfm_html->name; ?></div>
    <div class="col-4"><?php echo $sfm_html->seibetu; ?></div>
    </h4></div><div class="clearfix"></div>


    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>ふりがな</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5">
    <?php echo $sfm_html->ruby; ?>
    </div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>年齢・学年</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5"><h4>
    <?php echo $sfm_html->age; ?>歳 
    <?php echo $sfm_html->gakunen; ?>
    </h4></div><div class="clearfix"></div>


    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>参加者</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5"> <h4>
    <?php echo $sfm_html->sanka; ?>
    </h4></div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>住所</h4>
    </div>
    <div class="col-1">
    <div class="hiss">必須</div>
    </div>
    <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8"><h4>
    〒<?php echo $sfm_html->address1; ?> <?php echo $sfm_html->address2; ?><?php echo $sfm_html->address3; ?> <?php echo $sfm_html->address4; ?>
    </h4>
    </div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>TEL</h4>
    </div>
    <div class="col-1">
    <div class="hiss">必須</div>
    </div>
    <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5"><h4>
    <?php echo $sfm_html->tel; ?>
    </h4>
    </div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>関心事</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8"><h4>
    <?php echo $sfm_html->info1; ?>
    </h4></div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>タイプ</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8"><h4>
    <?php echo $sfm_html->info2; ?>
    </h4></div><div class="clearfix"></div>

    <div class="col-xs-11 col-sm-3 col-md-3 col-lg-3 cntnth">
    <h4>質問</h4>
    </div>
    <div class="col-1">
    <div class="hiss"></div>
    </div>
    <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8"><h4>
    <?php echo $sfm_html->situmon; ?>
    </h4></div><div class="clearfix"></div>

    <div align="center">
    <h4><?php echo $sfm_submit;?> <?php $this->crCheck(); ?></h4>
    </div>
    </form>

    </div>
    </body></html>

    キャンセル

  • 2016/11/08 20:34

    ikedasさんの指摘通り、このsformmail2にこだわるよりも他の新しいものに乗り換えたほうが早いかと思われます。

    キャンセル

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

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る