ページ 11

バージョンアップ後文字化けする

Posted: 2005年7月13日(水) 12:37
by さとう
バージョンアップの際に問題が発生したので書かせていただきます。
-------------------------------------------------------------------------
症状:バージョンアップ後、DreamweverでPHPファイルを開くと文字化けする

やってみたこと:修正メニュー>ページプロパティウインドウを開く。
エンコーディングを確認すると「UTF-8(Unicode)」に変わっているので
「日本語(EUC)」に戻しリロードボタンを押す。すると文字化けが直る。
ウインドウを閉じてファイルを保存。
ファイルを閉じてもう一度開くとまた文字化けする。

・バックアップしていたバージョンアップ前のデータを開くと文字化けはしませんでした。

・何度かバージョンアップをやり直してみたのですが、
view.php.incを上書きすると文字化けするようです。

・環境はDreamwever MX 6.1、win2000です。

Dreamweaverでエンコーディングが勝手にUTF-8になってしまう

Posted: 2005年7月13日(水) 13:48
by webmaster
 webmasterです。
 さとうさん、ご報告ありがとうございます。

 こちらでも現象を確認しました。
 これはバージョンアップとは関係なく、dreamweaverでphpファイルを編集
した場合に、何らかの条件が重なると起こる現象のようです。

 おそらく、これはdreamweaverの不具合のように思います。macromedia社に
問い合わせてみます。

 発生した場合の対処方法を見つけましたので、取り急ぎご報告致します。

【対処方法】
(追記:この方法ではなく、この次の投稿の対処方法をお試しください。)

 現在phpファイルの先頭に埋め込んである「<?php require( ....」の部分を、
先頭ではなく、<body>の直前に移動する。

 <body>の直前でなくとも、<head>内部でも大丈夫な場合もありました。
 ただ、cssファイルのリンクの前だとダメだったりしています。<body>の直前が
安定してOKでした。

2005.08.05 追記:ver.1.0.3aよりこの方法は使えなくなりました。必ず先頭に
記述する必要があります。次の投稿の対処をお試しください。


【原因】
 はっきりはしませんが、おそらくdreamweaverが「<?php 〜 ?>」の記述を
「PHPコード」ではなく、XMLのヘッダーと誤認識しているのが原因のように思われます。
 この為、XML=UTF-8と勝手に判断し、エンコーディングを変更してしまうようです。

 phpファイルの先頭付近になければ大丈夫のようですので、上記対策を参考に
下の方にずらしてみてください。
 「<?php include_once( ... 」の記述は先頭でなくとも、最初に埋め込みコマンドが
出現する前ならばどこでもOKです。


 この件は非常に重要だと思われますので、もう少し事象がハッキリしてから
トップページにてお知らせする予定です。
 何か情報をお持ちの方はご連絡お待ちしております。m(_ _)m

Re: Dreamweaverでエンコーディングが勝手にUTF-8になってしまう

Posted: 2005年7月13日(水) 15:23
by webmaster
 webmasterです。

 この件ですが、もっと簡単な対処方法を発見しました。

 現在、ファイル先頭に埋め込んで頂いている、

コード: 全て選択

<?php require( "cmsdesigner/include/view.php.inc" ); ?>
 となっている部分を、

コード: 全て選択

<?php require( "cmsdesigner/include/view.php.inc" ); // encoding="euc-jp" ?>
 に変更してみてください。

 「// encoding="euc-jp"」の部分が、dreamweaverを「騙している」部分です。

 詳しい説明をしますと、macromediaから回答をもらった訳ではありませんが、
Dreamweaverは、ファイル先頭の「<?php 〜 ?>」をxml宣言だと勘違いしている、
と推測されます。

 xml宣言とは、XMLファイルの先頭に記述する以下のような宣言です。

コード: 全て選択

<?xml version="1.0" encoding="utf-8" ?>
 

 見てお分かりの通り、<?〜?>の部分がPHPの埋め込み部分にそっくりです。
 この為、dreamweaverは「<?php 〜 ?>が先頭付近にあるとそれをxml宣言
だと誤認識し、「encoding="xxxx"」を探しに行くと思われます。

 しかし、それが見つからないので、規定値の「utf-8」を採用し、自動的にページ
のエンコーディングをUTF-8に設定しているものと思われます。

 これを裏付ける為、ためしに文字化けを起こすページの先頭に

コード: 全て選択

<?xml version="1.0" encoding="euc-jp" ?>
 

 の宣言を入れてみたところ、見事に文字化けが起きなくなりました。
 ただ、これを入れることでブラウザの互換性に問題が出る場合があります。

 そこで、dreamweaverが「<?php 〜 ?>」の部分をxml宣言だと誤認識している
のを逆手にとって、そこへ「enconding="euc-jp"」という文字を入れてやったら
どうかというのが今回の対策です。

 普通にPHP埋め込み部分にその文字を入れるとエラーになってしまうので、
PHPのコメント命令である「//」を使ってその部分をコメントアウトしています。

コード: 全て選択

<?php require( "cmsdesigner/include/view.php.inc" ); // encoding="euc-jp" ?>
 この結果は非常にうまく行きました。
 dreamweaverを「騙している」わけなので気持ち悪い方もいらっしゃるかも
しれませんが、ブラウザやPHPの処理には影響を及ぼしませんので、
問題は無いと思われます。

 この現象に悩まされている方はどうぞお試しください。