phpのincludeを使って外部ファイルを読み込もうとしています。


例:
<?php
include_once ('http://www.xxx.com/inc.php');
?>

出力元のエンコードはUTF-8で読込先のエンコードはShift-jisなんですが、上記のままでは文字化けしてしまいます。エンコードを読込先に合わせるにはmb_convert_encodingとかを使うと思いますがどのように記述したら良いでしょうか?
(ソースを希望します)
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/03/06 20:05:16
  • 終了:2007/03/07 00:32:11

回答(4件)

id:okuryu No.1

okuryu回答回数72ベストアンサー獲得回数32007/03/06 21:24:53

ポイント35pt

読み込み先に合わせるということは Shift_JIS で出力するということですよね。

次のような感じでどうでしょうか。

<?php

include_once 'http://www.example.com/inc.php';

$str = mb_convert_encoding($str, 'SJIS', 'UTF-8, SJIS');

echo $str;

?>

PHP: mb_convert_encoding - Manual

id:harakiri2

ん~、ダメです。文字化けしたままです…。

2007/03/06 21:44:24
id:okuryu No.2

okuryu回答回数72ベストアンサー獲得回数32007/03/06 22:22:41

ポイント35pt

header 関数で content-type を指定してもだめですか?

<?php

header('content-type:text/html;charset=Shift_JIS');

// 省略

?>
id:harakiri2

先述の方法をローカルで試したところ、

問題なくincludeされましたが、

読込もうとしているアプリケーション側では

文字化け解消されませんでした。

もう少し自分で検討してみます。

ありがとうございます。

2007/03/07 00:31:28
id:kurukuru-neko No.3

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/07 00:07:12

ポイント10pt

むりやり

例:

 <?php
 $file=file_get_contents("http://xxx/inc.php");
 $file = mb_convert_encoding($file,"SJIS","UTF8");
 echo "--- read data ---\n";
 echo $file;
 echo "eval read data ---\n";
 eval( "?>\n".$file."\n<?php\n");
 ?>

サーバーで xxx.php実行された結果が入力ファイル

になる可能性があるかも?

id:kurukuru-neko No.4

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/07 00:20:41

ポイント10pt

間違って逆に変換かも?

>出力元のエンコードはUTF-8で

例のPHPがincludeする側のPHPでUTF-8

>読込先のエンコードはShift-jis

例のPHPがincludeする先のサーバ上のPHP文字コードがSJIS

だと

$value = mb_convert_encoding($value,'UTF-8','SJIS');

逆だと

$value = mb_convert_encoding($value,'SJIS','UTF-8');

それとも上記のinclude_onceは

外部のPHPの結果を取得したいだけであれば

evalは不要かな。

  • id:harakiri2
    ダメです。状況は変わりませんでした。
    ありがとうございます。
  • id:kurukuru-neko

    参照するphpを以下とした場合
    <?php
    echo "---- UTF8 ----\n";
    echo "UTF-8 漢字\n";
    ?>

    Linuxのコマンドラインで以下の呼び出した側の
    以下のPHP動作の確認してみてください
    <?php
    mb_language("Japanese");
    mb_internal_encoding("SJIS");
    $file= file_get_contents('http://www.xxx.com/inc.php');
    echo $file ;
    echo "\n--- convert---\n"
    $file = mb_convert_encoding($file,"SJIS","UTF-8");
    echo $file;
    ?>
    とすると何が表示されますか?

    (1) SJIS環境でUTF-8を表示した場合
    ・ソ<?php
    echo "---- UTF8 ----\n";
    echo "UTF-8 貍「蟄予n";
    ?>
    --- convert---
    ?<?php
    echo "---- UTF8 ----\n";
    echo "UTF-8 漢字\n";
    ?>

    (2) EUC環境でUTF-8を表示した時
    鏤深?php
    echo "---- UTF8 ----\n";
    echo "UTF-8 羲√・n";
    ?>
    --- convert---
    ?<?php
    echo "---- UTF8 ----\n";
    echo "UTF-8
    須・;
    ?>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません