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

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

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

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

受付中

PHPで、セッションに入れた日本語が文字化けする。

rikuta930
rikuta930

総合スコア18

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

4回答

0評価

1クリップ

3489閲覧

投稿2019/06/16 09:43

編集2022/01/12 10:55

PHPを利用して、Twitterのようなウェブアプリケーションを作成しています。
環境はXAMPPを利用していて、PHPのバージョンは7.3.5です。ブラウザはchromeを使っています。
一度、大学のサーバーを利用して、試した際は問題は発生しなかったため、phpの設定に関する問題だと思われます。

今回、inputタグから受け取った情報をセッションに入れて、確認画面で表示するといったことをやりたいと思っています。

その際に困ったことが発生したので、わかる方いらっしゃいましたら、教えていただけると幸いです。

まず、登録フォームのコードがこちらです。

PHP

<?php session_start(); if(!empty($_POST)){ if($_POST['name'] === '') { $error['name'] = 'blank'; } if($_POST['email'] === '') { $error['email'] = 'blank'; } if(strlen($_POST['password']) < 4) { $error['password'] = 'length'; } if($_POST['password'] === '') { $error['password'] = 'blank'; } $fileName = $_FILES['image']['name']; if (!empty($fileName)) { $ext = substr($fileName, -3); if ($ext != 'jpg' && $ext != 'gig' && $ext != 'png') { $error['image'] = 'type'; } } if(empty($error)){ $image = date('YmdHis') . $_files['image']['name']; move_uploaded_file($_FILES['image']['tmp_name'],'../member_picture/' . $image); $_SESSION['join'] = $_POST; $_SESSION['join']['image'] = $image; header("Location: check.php"); exit(); } } if($_REQUEST['action'] == 'rewrite' && isset($_SESSION['join'])) { $_POST = $_SESSION['join']; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>会員登録</title> <link rel="stylesheet" href="../style.css" /> </head> <body> <div id="wrap"> <div id="head"> <h1>会員登録</h1> </div> <div id="content"> <p>次のフォームに必要事項をご記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['name'], ENT_QUOTES))?>" /> <?php if ($error['name'] === 'blank'):?> <p class="error">ニックネームを保存してください</p> <?php endif; ?> </dd> <dt>メールアドレス<span class="required">必須</span></dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['email'], ENT_QUOTES))?>"> <?php if ($error['email'] === 'balnk'):?> <p class="error">メールアドレスを入力してください</p> <?php endif;?> <dt>パスワード<span class="required">必須</span></dt> <dd> <input type="password" name="password" size="10" maxlength="20" value="<?php print(htmlspecialchars($_POST['password'], ENT_QUOTES))?>" /> <?php if ($error['password'] === 'blank'):?> <p class="error">パスワードを入力してください</p> <?php endif; ?> <?php if ($error['password'] === 'length'):?> <p class="error">パスワードは4文字以上で入力して下さい</p> <?php endif; ?> </dd> <dt>写真など</dt> <dd> <input type="file" name="image" size="35" value="test" /> <?php if ($error['image'] === 'type'):?> <p class="error">* 写真などは「.gif」、「.jpg」、「.png」の画像を指定してください</p> <?php endif; ?> <?php if (!empty($error)): ?> <p class="error">恐れ入りますが、画像を改めて指定してください</p> <?php endif; ?> </dd> </dl> <div><input type="submit" value="入力内容を確認する" /></div> </form> </div> </body> </html>

ここでは、以下の部分で、受け取った情報を、

PHP

<input type="text" name="name" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['name'], ENT_QUOTES))?>" />

こちらで、セッションに格納しています。

PHP

$_SESSION['join'] = $_POST;

たとえば、フォームの名前に、「ああああ」を入れるとします。
この時点で、var_dumpすると、こちらの結果になります。

array(4) { ["name"]=> string(24) "ああああ" ["email"]=> string(4) "aaaa" ["password"]=> string(4) "aaaa" ["image"]=> NULL }

["name"]=> string(24) "ああああ" のように、文字化けが発生しています。

php.iniの設定の問題だとおもったので、https://qiita.com/guzuri/items/643c1311224e8d482278や、
https://techacademy.jp/magazine/2412のサイトを見て、設定を変更したのですが、問題は解決しませんでした。

php.iniの変更部分は以下になります。

;mbstring.language = Japanese ;mbstring.internal_encoding = EUC-JP ;mbstring.http_input = auto ;mbstring.http_output = SJIS ;mbstring.encoding_translation = Off ;mbstring.detect_order = auto ;mbstring.substitute_character = none ;mbstring.func_overload = 0

こちらを

mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none mbstring.func_overload = 0

このように変更しました。

そして、文字コードを以下で設定しました。

; PHP's default character set is set to empty. ; http://php.net/default-charset ;default_charset = "iso-8859-1" default_charset = UTF-8

こちらについて、わかる方がいらっしゃいましたら、教えていただけますでしょうか?

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

m.ts10806

2019/06/16 09:52

Apacheは再起動したのでしょうか。 また、PHPファイルの文字コードは何でしょうか。
rikuta930

2019/06/16 09:55

Apacheは再起動いたしました。 文字コードはUTF-8です。
退会済みユーザー

退会済みユーザー

2019/06/17 13:18

文字化けしていることを確認しているwebブラウザ名とバージョン、動作させているphpのバージョン、phpを実行させているサーバー情報(Apache or Nginxらのバージョン情報、OSの名称とバージョン)あたりも添えてあると、先入観や思い込みを省きやすくなるかと。
rikuta930

2019/06/17 19:55

ありがとうございます。 早速、追加します。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。