🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

12975閲覧

内部文字エンコーディングとは何なのか

aaaaaaaa

総合スコア501

PHP

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

2グッド

1クリップ

投稿2018/06/28 10:16

マルチバイト文字列関数(mbstreng)のなかにmb_internal_encodingという文字コードの初期値をきめる関数があります。
こちらをみると設定する初期値を内部文字エンコーディングと呼んでいます。
マルチバイト文字列関数を利用する際の初期値の文字コードとは言わずに、内部文字エンコーディングと呼ぶ理由は何なのでしょうか。
そもそも、内部文字エンコーディングとは、何なのでしょうか。

fcsapu, StupidDog👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

mbstring.internal_encodingという
php.iniの設定値のことです。
日本語直訳気味に表現して「内部文字エンコーディング」と呼んでいるのだと。

マルチバイト文字列 関数群がテキストを扱うときに参照され、
エンコーディングを関数の引数でいちいち設定しなくても処理できるようにしているもののようです。

なお、mb_internal_encoding()という関数は、実行時にmbstring.internal_encoding設定値を変更したり取得したりできるものです。

そもそもマルチバイト文字列とは、
PHP: はじめに - Manualにも解説がありますが、
一つの文字を1バイトデータでは表現できない場合複数のバイトデータの連結で表現するものなのです。
エンコードによっては、1バイトのときもあれば2バイトのときもあれば4バイトのときもあったりします。(あくまで一例)
文字列の一部分を切り出したり置き換えたりなど加工するときに
文字列データを破壊せずバイトデータの境目を適切に認識するために必要な情報(←エンコード情報)を、
都度mbstring系関数の引数で与えてもよいのですが、
コード量(文字タイプ数)を削減したり可読性を向上したりするために、
指定がない場合はエンコーディングをどう扱うかというルールを決めているだけのことです。
それを日本語直訳気味に表現すると「内部文字エンコーディング」になるのかなと。

内部、としているのは、PHPの中のこと(ファイルやHTTPリクエストやHTTPレスポンスじゃない)だからかなぁ。

この回答を書く前に、mbstring実装の歴史的背景を調べようとしたけど、
時間が足りず。

投稿2018/06/29 01:57

編集2018/06/29 02:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aaaaaaaa

2018/06/29 10:10

ご回答ありがとうございます。 PHPの中というのは、PHPのエンジンであるzendのことですか。
退会済みユーザー

退会済みユーザー

2018/07/14 09:07

んーと、zendっていうか、PHPインタプリタさん。 つまり、PHPインタプリタさんが、「我々はこのエンコーディングを公用語とする」と宣言するするのがmb_internal_encodingになる。 だから、プログラムの中に記述されたストリングリテラルは、その公用語で書かれている前提になる。 今、こんなteratail.phpというファイルがUTF-8で保存されている。 <?php $text = "みんなの大喜利会場『テラテイル』"; mb_internal_encodingが"UTF-8"であるとする。 PHPインタプリタさんにはこう見える。 <?php $text = "みんなの大喜利会場『テラテイル』"; mb_internal_encodingが"cp932"であるとする。 PHPインタプリタさんにはこう見える。 <?php $text = "縺ソ繧薙↑縺ョ螟ァ蝟懷茜莨壼エ縲弱ユ繝ゥ繝・う繝ォ縲・; Could u understand?
退会済みユーザー

退会済みユーザー

2018/07/14 10:57

そうそう、んで言い忘れてたんだけど、 mb_ナンチャラってやつに関しては、 mb_ナンチャラって書いてある関数にしか影響しないです。 だから上の例で行くと、 縺ソ繧薙↑縺ョ螟ァ蝟懷茜莨壼エ縲弱ユ繝ゥ繝・う繝ォ縲・ っていうのは正確には、mb_ナンチャラ関数からの視界ですね。 今頃追記しておきます。
aaaaaaaa

2018/07/19 04:30

ご返信ありがとうございました。
guest

0

「初期値」は参照するときの話で、設定するときは内部エンコーディングを
変更しているという認識がわかりやすいのでは?

もちろん内部エンコーディングを変えたあと参照すれば、それはもう
初期値ではないのですけどね。

投稿2018/06/28 11:07

yambejp

総合スコア116644

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問