文字コードを考慮する
文字化けをしないように文字コードを考慮してみましょう。
例えばスクリプトが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テンプレート | 次へ 連想配列 |