初めまして、PHP初心者です。
PHPで現在、日報を書き込むプログラムを作っています。
目的としては、書き込んだ日報をDBに登録させるというプログラムです。
その中で、HTMLのフォームで入力した日本語の文章や文字列をブラウザに出力させるにはどうしたら良いのでしょうか?
普通にprintで出力させると、文字化けをしてしまい困っております。
環境は、OSはLinux、PHPVer.3、DBはPostgreSQLです。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

PHP3はi18nの国際化バージョンでしょうか?


基本的にi18nでないPHPのときはEUCでないと文字化けすると思います。i18nでもconfigureのときに--enable-i18nを指定しないとi18nになりません。

i18nだとすると、ソースの文字コードは何でかいてありますか?php.iniの中で出力する文字コードを指定してやる必要があります。具体的には
i18n.http_output = SJIS
のように指定します。
または、ソースの中でprint(あるいはecho)で出力する前の部分で
i18n_http_output(文字コード)
で出力する文字コードを指定してやればそれ以降その文字コードで出力されます。
    • good
    • 0
この回答へのお礼

お返事遅くなりまして、申し訳ありません。
只今、違う仕事が急に入ってしまい、お教えくださったこと試せていませんが、アドバイスありがとうございます。
時間が出来たら試してみたいと思います。

お礼日時:2001/05/15 14:17

データを日本語EUCにしてDBへ登録し、


日本語EUCとして出力してみて下さい。

又、出力する際は、
header("Content-Type: text/html; charset=EUC-JP");
として文字コードを明示的に指定する方法もあります。

※これらの方法では、ソースコード自身も日本語EUCに
する必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
一応、EUCの設定にはしています。
もう一度、よく見直してみます。
ありがとうございました。

お礼日時:2001/05/29 17:49

HTMLまたはプログラムを書くときの文字コードがあっていないのでは?


HTMLでのMETAタグで
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
を入れていますでしょうか?
printのほかに<?php echo $NAME; ?>などの
方法もあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
タグの中で文字コードの指定はしています。
EUC-JPにしようが、Shift-JISにしようが、文字化けは変わりませんでした。echoも試したのですが、ダメでした。

お礼日時:2001/05/09 10:04

文字コードが違うとかそういうものではないでしょうか?


一度出力してきたページの文字コードを変更してみては
どうなりますか?

ではでは☆
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
出力したページの文字コードを変更しても文字化けは変わりませんでした。

お礼日時:2001/05/09 10:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPHPのPEAR:DBでPostgreSQLを使用時、カラム名でデータが取得できない

PHPのPEAR::DBのサンプルを公開しているサイトから以下のソースを引っ張ってきて、試してみました。すると、少しおかしな現象が発生したので、ご質問させていただきます。

------------------------------
$dsn = "pgsql://postgres:pass@localhost/postgres";

$db = DB::connect($dsn);
if (PEAR::isError($db)) {
die($db->getMessage());
}

print('接続に成功しました<br>');

$sql = 'select * from "USER_TBL"';
$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getMessage());
}

while ($row =& $res->fetchRow()) {
print($row['ID']);
print($row['NAME'].'<br>');
}
------------------------------

接続は問題なかったのですが、データベースからデータを取得する「print($row['ID']);」の部分が動かず、<br>だけ出力されてしまいます。IDのカラム名をダブルクォーテーションで囲っても、値が出てきません。ところが、print($row[0]);などのように、数値を指定してやると、その部分が出力されます。

また、カラム名を小文字に変えてみたりもしましたが、やはりそれでもデータは取得できませんでした。

理由がよく判らないのですが、カラム名でデータを引っ張ってきたいと思います。解決方法はありませんでしょうか?

PHPのPEAR::DBのサンプルを公開しているサイトから以下のソースを引っ張ってきて、試してみました。すると、少しおかしな現象が発生したので、ご質問させていただきます。

------------------------------
$dsn = "pgsql://postgres:pass@localhost/postgres";

$db = DB::connect($dsn);
if (PEAR::isError($db)) {
die($db->getMessage());
}

print('接続に成功しました<br>');

$sql = 'select * from "USER_TBL"';
$res =& $db->query($sql);
if (PEAR::isError($res)) {
die($res->getM...続きを読む

Aベストアンサー

参考URLの DB_FETCHMODE_ASSOC を参照しましょう。

参考URL:http://pear.php.net/manual/ja/package.database.db.intro-fetch.php

QPHP3で作ったプログラムをPHP4、PHP5で動作させる事は可能ですか

PHP3で作ったプログラムをPHP4、PHP5で動かすことは可能でしょうか?例えばあるサイトがPHP3を未だに使用していたとします。もしPHP4,5でPHP3時に書いたプログラムが動けばいいのですが、動作はするでしょうか?もし動かなければ少しずつチューニングしていくより、一気に4,5で書き直した方がはやいでしょうか?

Aベストアンサー

1. 動くかどうか?
 物によるでしょうね
 具体的に判断するには やはり自分のPC上にApache+php5を入れて
 目的のphpを動かしてみるのが良いかと?
windowsでしたら Apache+PHP+MySqlが一度にインストールできる
 XAMPP http://phpspot.net/php/pgXAMPP.html
 Vertrigo http://japanese.osstrans.net/software/vertrigo.html
  が便利です
   (より確実なテストを行うなら目的のサーバーと同じ環境
    例えば CentosなどのLinuxでTEST用サーバーを立てた方がBESTですが)

2. php4や5書き換え?
もはやPHP4もサポート終了ですので PHP5で書き換えた方が良いかと思われます。
http://www.phppro.jp/news/403

QPHPでフォームからデータDBに書き込むサンプル

PHPで、フォームから入力されたデータをMySQLのDBへ書きこみ、次画面でHTML内に入力されたデータ表示するようなサンプルプログラム等、どこかに公開されてないでしょうか。
若しくは、ご存知の方、教えて頂ければ幸いです。

1、フォームへデータ入力
2、サブミットを押す。
3、DBへデータを書き込み。
4、HTML内にデータを表示する。

というような流れ。

Aベストアンサー

書いてみました。
MySQL環境が無く、テストしていないので分かりませんが、
タブン動くと思いますよ^^

フォーム表示 → 登録ボタンクリック → データベース登録 → データベース検索 → 検索結果のHTMLでの表示

詳しい人ツッコミお願いします!

<!-- ここからヘッダー部分です -->
<html>
<head>
<title>テストスクリプト</title>
</head>
<body>
<!-- ここまでヘッダー部分です -->

<?php

# フォームからPOSTデータが送信されていない場合の処理
# 意味は"もしregという名前のPOSTデータが無かったら?"
if(!$_POST['reg']){

# HTMLで入力フォームを表示(送信ボタンクリックでこのスクリプト自身にPOST)
print <<< html
MySQLへ登録してそれをHTMLで表示するスクリプト
<form action="$PHP_SELF" method="post">
<input type="text" name="reg">
<input type="submit" value="登録">
</form>
html;

# regと言うPOSTデータが送信されてきたら以下の処理
}else{

# データベースに接続(アドレス・ポート番号・ユーザー名・パスワードを環境に合わせて書き換える)
$dbcon = mysql_connect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");

# データベースを選択(データベース名を環境に合わせて書き換える)
mysql_select_db("データベース名");

# SQL文を用意(登録用)
# 意味は"$_POST['reg']というデータをテーブル名と言うテーブルに登録します"
$sql_reg = "insert into テーブル名 values('" . $_POST['reg'] . "')";

# データを登録
$result_reg = mysql_query($sql_reg);

# 登録に成功したら以下の処理
# 意味は"もし$result_regが成功したら?"
if($result_reg){

# 参照用SQL文を用意(テーブル名を環境に合わせて書き換える)
# 意味は"テーブル名というテーブルの全てのカラムを検索します"
$sql_sel = "select * from テーブル名";

# 登録したデータを参照する
$result_sel = mysql_query($sql_sel);

# 登録データの参照に成功したら以下の処理
# 意味は"もし$result_selが成功したら?"
if($result_sel){

# 参照したデータを全部表示(カラム名を環境に合わせて書き換える)
while ($item = mysql_fetch_array($result_sel)){
print $item['カラム名'] . "<BR>";
}

# データベース接続を切断
mysql_close($dbcon);

# 登録データの参照に失敗したら以下の処理
}else{

# エラーメッセージを表示
print "データの参照に失敗しました。";

# データベース接続を切断
mysql_close($dbcon);

}

# 登録に失敗したら以下の処理
}else{

# エラーメッセージを表示
print "登録に失敗しました";

# データベース接続を切断
mysql_close($dbcon);

}

}

?>

<!-- ここからフッター部分です -->
</body>
</html>
<!-- ここまでフッター部分です -->

参考URL:http://lcl.web5.jp/prog/phpdb.html

書いてみました。
MySQL環境が無く、テストしていないので分かりませんが、
タブン動くと思いますよ^^

フォーム表示 → 登録ボタンクリック → データベース登録 → データベース検索 → 検索結果のHTMLでの表示

詳しい人ツッコミお願いします!

<!-- ここからヘッダー部分です -->
<html>
<head>
<title>テストスクリプト</title>
</head>
<body>
<!-- ここまでヘッダー部分です -->

<?php

# フォームからPOSTデータが送信されていない場合の処理
# 意味は"もしregという名前のPOS...続きを読む

QDBからPHP出力された画像の情報取得について

Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。

MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。

画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。

// 画像出力処理
<?php
$image = /* DBからバイナリを取得する処理 */
header("Content-type: image/jpeg\n\n");
echo $image;
exit();
?>

上のスクリプトをWEBブラウザで呼び出すと画像を表示する事ができます。
また、<img src="画像出力スクリプトのURL">としてHTML中に記述しても画像を表示できます。

しかし、getimagesize() で画像情報を取得しようとしても False となり、画像の構成情報を取得できません。

// 画像情報取得処理
<?php
$src = "http://画像出力スクリプトのURL";
var_dump(getimagesize($src));
exit();
?>

$src にローカルにある実ファイル画像を指定した場合( "./hoge.jpeg" )や
他のWEBサーバ上にある画像ファイルを指定した場合( "http://よそのサーバURL/hoge.jpeg" )等は画像情報をちゃんと取得できます。

画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。
原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。

MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。

画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。

// 画像出力処理
<?php
$image = /* DBからバイナリを取得する処理 */
h...続きを読む

Aベストアンサー

#1 の方が仰る様に getimagesize は、ファイルを読み込んで情報を出力する関数ですから、バイナリのデータでは無理なのではないかと。

私が前にやった方法だと、ファイルをDBにBLOBに入れる際に、その画像ファイルの属性を別テーブルに入れていました。

そんなときファイルをDBに入れる際に、getimagesize を使うと便利だろうなと言う感じはします。

こっちの方が明瞭ですし、扱いやすかったです。

Q[PHP+MySQL]DBがEUC,出力はSHIFT-JIS・・・どうクリアするか?

こんにちは。

PHPとMySQLで携帯向けのコンテンツを作成しています。

携帯ではShift-JISしか表示されないということを・・・今知り、パニックになっています。

というのは、MySQLがEUCで動作している為、いくらPHPをShift-JISで保存しても、DBから引いてきた情報は文字化けしてしまうのです・・・。

では、MySQLの文字コードを変更すれば?ということになるのですが、サーバーの環境上、それを変更することが出来ません。

どうすればいいのでしょうか・・・。
エンコードコマンドも調べたのですが、うまくいかず。
出来れば、SQLで取ってきた行を一括でエンコード出来る方法があれば助かりますが、その他の方法でも結構です。

とにかく、今の環境で携帯サイトを文字化けなく表示する方法をご教授下さい。

宜しくお願い申し上げます。

Aベストアンサー

実際にやっているのですが、
携帯用の出力HTMLの全てを変数にいれて、
最後に
print mb_convert_encoding($html, "SJIS", "EUC");
でエンコードしています。
他の方法を試しましたが、なぜかSJISを吐き出してくれなかったので・・・


人気Q&Aランキング

おすすめ情報