Top  Dolphy Software  

TOP > セミナー >  HTMLテンプレート > 文字コード

文字コードを考慮する

文字化けをしないように文字コードを考慮してみましょう。
例えばスクリプトが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);
 
// テンプレートの出力
print $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テンプレート 次へ 連想配列
 
△画面上