文字コードを考慮する
文字化けをしないように文字コードを考慮してみましょう。
例えばスクリプトがUTF-8、HTMLテンプレートがShift_JISだとします。
ポイントは、読み込んだHTMLテンプレートを最初に文字コード変換することです。
※PHPの設定は以下を想定しています。
例えばスクリプトがUTF-8、HTMLテンプレートがShift_JISだとします。
| hellp.php (UTF-8) | hello.htm (SJIS) | |
<?php
// テンプレートの読み込み
$html = file_get_contents("hello.htm");
// テンプレートの文字コード変換
$to_encoding = mb_internal_encoding();
$html = mb_convert_encoding($html, $to_encoding, "auto");
// テンプレート文字の置換
$html = str_replace("{message}", "こんにちは", $html);
// テンプレートの出力
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>はじめまして</title> </head> <body> <font color="blue">{message}</font> </body> </html> |
ポイントは、読み込んだHTMLテンプレートを最初に文字コード変換することです。
| HTMLテンプレートの読み込み | $html | |
$html = file_get_contents("hello.htm");
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>???</title> </head> <body> <font color="blue">{message}</font> </body> </html> |
|
| 文字コードを内部コードに変換(SJIS → UTF-8) | $html | |
$to_encoding = mb_internal_encoding(); $html = mb_convert_encoding($html, $to_encoding, "auto"); |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>はじめまして</title> </head> <body> <font color="blue">{message}</font> </body> </html> |
|
| テンプレート文字を置き換える | $html | |
$html = str_replace("{message}", "こんにちは", $html);
|
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>はじめまして</title> </head> <body> <font color="blue">こんにちは</font> </body> </html> |
|
| HTMLの出力 | 内部コード(UTF-8)からhttp_outputで指定されたSJISへコード変換されWWWブラウザへ送られる | |
print $html; |
こんにちは |
※PHPの設定は以下を想定しています。
| php.ini |
| output_handler = mb_output_handler [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto |
| 戻る 最初に | HTMLテンプレート | 次へ 連想配列 |