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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

2408閲覧

DBから受け取ったデータがユニコードで返ってきてしまう

jam912sh

総合スコア25

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2018/11/20 02:07

編集2018/11/20 02:24

前提・実現したいこと

ある値をもとにDBに参照してデータを取得したいのですが、
取得したデータが文字化けして表示されます。
「ユニコード」で戻って来るようですが「UTF-8」で戻ってくる方法が分かりません。
PHPにお詳しい方、ご教示頂たく存じます。
宜しくお願い致します。

データベース(テーブル名:m_test)

nameid,name, 001,東京 002,大阪

■詳細につきまして
PHPとPostgreSQLにて、取得した「001」を元に、
DBより「東京」を取得したいのですが、
「\U6771\U4eac 」と返ってきます。
ユニコードの東京という漢字みたいですが、
「\U6771\U4eac 」ではなく「東京」を取得したいです。

コード(DatabaseClass.php)

<?php //内部文字コードを変更 mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); class Database{ var $dbServer; var $dbName; var $dbUser; var $dbPass; var $link; var $db; var $query; //DB接続 function __construct($db_name) { //DBの情報 $this->dbServer="localhost"; $this->dbName=$db_name; $this->dbUser="test"; $this->dbPass="test"; //ポスグレに接続 $this->link=pg_connect("host={$this->dbServer} dbname={$this->dbName} user={$this->dbUser} password={$this->dbPass}") or die(exit); //UTF-8の文字コードに変更 $this->query=pg_query($this->link,'SET NAMES utf8'); } //DBを閉じる public function close() { return pg_close($this->link); } //読み込むテーブルの選択 public function select($query) { $result=pg_query($query); $row=array(); $row=pg_fetch_assoc($result); return $row; } //指定したクエリの実行 public function query($query) { return pg_query($this->link,$query); } //JSON形式に変換用の出力 public function jsonparse($query) { $row = pg_fetch_object($query); return $row; } } ?>

コード(get.php)

<?php //DatabaseClassを読み込み include_once "DatabaseClass.php"; //テーブル名が選択されているかどうか確認 if($_POST["table_name"] ) { //DB名設定 $db_name = "test"; $database = new Database($db_name); $table_name = $_POST["table_name"]; $sql = ("SELECT * from m_test where nameid = '001' "); //クエリ送信 $query = pg_query($sql); $json= array(); if(strstr($table_name, 'm_test')){ while ($row = $database->jsonparse($query)) { $json[] = array( 'name' => $row->name, ); } } //JSON形式で出力 header("Content-Type: application/json; charset=utf-8"); echo json_encode($json); //DBを閉じる $database->close(); } ?>

補足情報(FW/ツールのバージョンなど)

PostgreSQL:10.4
PHP:5.6

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/11/20 02:19

PHP のマルチバイト関連の設定、PostgreSQL のスキーマ定義、new Database されていますが、Database クラスの処理内容を 質問に追記してください。
jam912sh

2018/11/20 02:25

失礼致しました。Database クラスの処理内容を 質問に追記致しました。宜しくお願い致します。
CHERRY

2018/11/20 02:35

psql --list 等で対象のデータベースを確認して、エンコーディングは、何になっていますか?
jam912sh

2018/11/20 02:51

psql --listにて確認致しましたところ、エンコーディングは「UTF8」になっているようで御座います。
guest

回答1

0

ベストアンサー

ここ最近の質問でもありましたが文字化けではありません。
URLエンコードやJSONエンコードなどで全角文字列がエンコードされた状態です。

json_encodeされてるので正しい姿ですね。
扱うときはデコードされて配列の状態となるので問題はありません。

投稿2018/11/20 04:33

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/20 06:02

「配列の状態となる」だと正しい表現ではないですね。 「配列となり、エンコードされた文字列も元に戻る」です
jam912sh

2018/11/20 06:03

mts10806様、いつもご教示頂き有難うございます。 上記の件、大変勉強になりました。受け取ったあとに処理を致します。有難うございます!
m.ts10806

2018/11/20 06:05

解決されたようで何よりです。 特にエンコード・デコードについては戸惑うことも多いかと思いますが、 本当に簡単なミニマムコードを作ってみて動作確認して使うようにすると 理解も深まり的確に扱えるのでPHPマニュアルとにらめっこしながら試してみてください。
jam912sh

2018/11/20 06:11

mts10806様、上記アドバイス有難うございます。 PHPマニュアルを確認し、もっと勉強致します!有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問