• 締切済み

SmartyでXMLの読み込みデータが文字化け

今まで使っていたサーバーのプランが古くて容量が少ないため、同じレンタルサーバーでプランUPしました。 ただそのプランは旧プランと仕様が下記のように変わっています。 【PHP】 旧プラン:PHP4 → 新プラン:PHP5 【文字コード】 旧プラン:EUC-JP → 新プラン:UTF-8 【データベース】 旧プラン:MySQL4.1 → 新プラン:MySQL5 【データベース文字コード】 旧プラン:EUC-JP → 新プラン:UTF-8 文字コードがUTF-8になったため、それに合わせてページの文字コード等を変更したのですが、 一部Smartyで作られるページがあり、そのページの文字化けだけがどうしても解決できません。 そのページはPHPファイル、tplファイル、xmlファイルの3ファイル使っています。 各ファイルはテキストエディタでUTF-8に変換し、tplファイルにある表示される文字は文字化けしません。 ただxmlファイルから読み込むデータが、すべて「?」マークの文字化けをしてしまいます。 念のため、ここだけEUC-JPのまま、つまり何も変更をしない状態にしても同じ「?」マークの文字化けをしてしまいます。 他のファイルも見てみたのですが、文字コードらしい要素が見当たらず(もしくは気づかない)原因がわかりません。 Smartyはまだよくわからなくて、このシステムを作った前々任者とも連絡がとれないので、どうすればいいのか困っています。 どうか宜しくお願いします。

  • XML
  • 回答数2
  • ありがとう数1

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

一点だけ最後に確認して、問題なければ、 [通報する] から運営に連絡して、カテゴリを PHP に変えてもらったほうがいいかも。 確認点。 <?xml で始まる XML ファイルの初めの行の encoding="..." は、なんて書いてある? もし、"UTF-8" か "utf-8" じゃなければ、"UTF-8" に書き換える。 もともと、"UTF-8" なら、 Smarty の tplファイルを読み込んで、テンプレートロジックに渡す PHP 部分か、 そうじゃなければ、もしかすると、 XML は Smarty じゃ無くて JavaScript で読み込んでるのかも。 PHP の出力結果の HTML ファイルに XML ファイルの内容が反映されてるかどうかで、 JavaScript で読み込んでるかどうかわかるから、 ウェブブラウザでページを開いて、 右クリックして、 メニューから [ページのソースを表示(V)] を選択して、 PHP で出力された HTML のソースを開いて、 その中に、XML の内容が記述されていたら Smarty その中に、XML の内容が記述されていないなら JavaScript。 。。。かな?

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

XML ファイルの 『<?xml 』から、初めの要素(ルート要素)の開始タグまで書くといいかも。 それを見れば、XML ファイルの問題か、それ以外かの切り分けはできるとおもう。

eos1941
質問者

お礼

回答ありがとうございます。 XMLファイル自体には問題はなさそうなんです。旧プランでは問題なくつかえていますので。 たぶんどこかで文字コードの設定を変更か追加なんでしょうが、それが全くわからないんです。

関連するQ&A

  • PHP(smarty)についての質問(文字化け)

    あるサイトでsmartyを勉強中ですが、そのサンプルファイルを実行したところ、 文字化けが発生して困っています。 ・form.php←お問い合わせ用テンプレートファイルの指定 ・form.tpl←お問い合わせ情報を入力させるテンプレートファイル ・template.tpl←テンプレートファイルを表示させるテンプレートファイル form.phpから、お客様情報を入力させるためのテンプレートファイル(form.tpl)を指定し、 template.tplにそれを表示させるのが処理概要です。 実行すると、タイトルの"問い合わせフォーム"は表示されますが、 それ以下のform.tplの日本語部分が文字化けします。 template.tplで{include file=$content_tpl params=$params}の処理で form.tplを取り込んでいますが、その時文字コードがおかしくなっている気がします。 form.tplに対して文字コード(UTF-8)が有効になっていないと思われます。 実験的に、{include file=$content_tpl params=$params}を削除して、 そこにform.tplの記載をすべて記述すると文字化けは起こりませんでした。 文字コードの指定をform.tplに対しても有効にするにはどのように修正すればよろしいでしょうか。 以下にソースファイルを記載します。 ★form.php <?php // 共通の設定を読み込む require_once( 'common.php' ); // Smartyオブジェクト取得 $smarty =& getSmartyObj(); // ひな形のSmartyテンプレートでincludeするテンプレートを指定 $smarty->assign( 'content_tpl', 'form.tpl' ); // パラメータを渡す $smarty->assign( 'params', array( 'types' => array( 'request' => '意見、要望', 'question' => '質問、問い合わせ', 'other' => 'その他' ) ) ); // ページを表示する $smarty->display( 'template.tpl' ); ?> ★form.tpl <p>お問い合わせやご意見・ご要望を以下のフォームにご記入の上ご送信ください。</p> <form method="post" action="post.php"> <dl> <dt>お名前</dt> <dd> <input type="text" name="name" value="{$params.name|escape:'html':'UTF-8'}" /> {if $params.errors.name} <p class="error-message">名前を入力してください。</p> {/if} </dd> <dt>メールアドレス</dt> <dd> <input type="text" name="address" value="{$params.address|escape:'html':'UTF-8'}" /> {if $params.errors.address} <p class="error-message">アドレスが不正です。</p> {/if} </dd> <dt>お問い合わせ種類</dt> <dd> {html_options name="type" options=$params.types selected=$params.type} {if $params.errors.type} <p class="error-message">お問い合わせ種類が不正です。</p> {/if} </dd> <dt>お問い合わせ件名</dt> <dd> <input type="text" name="title" value="{$params.title|escape:'html':'UTF-8'}" /> {if $params.errors.title} <p class="error-message">件名を入力してください。</p> {/if} </dd> <dt>お問い合わせ内容</dt> <dd> <textarea name="content" cols="60" rows="5"> {$params.content|escape:'html':'UTF-8'} </textarea> {if $params.errors.content} <p class="error-message">お問い合わせ内容を入力してください。</p> {/if} </dd> </dl> <input type="submit" value="送信する" /> </form> ★template.tpl <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>問い合わせフォーム</title> <style type="text/css"> {literal} .error-message{ margin:5px; font-size:80%; color:red; } {/literal} </style> </head> <body> <h1>問い合わせフォーム</h1> {include file=$content_tpl params=$params} </body> </html> ★common.php <?php define( 'SMARTY_DIR', 'C:/xampp\php/smarty/libs/' ); require_once( SMARTY_DIR .'Smarty.class.php' ); // Smartyオブジェクト取得 function & getSmartyObj() { static $smarty = null; if( is_null( $smarty ) ){ $smarty = new Smarty(); $smarty->template_dir = 'C:/xampp/php/smarty/templates/'; $smarty->compile_dir = 'C:/xampp/php/smarty/templates_c/'; $smarty->config_dir = 'C:/xampp/php/smarty/configs/'; $smarty->cache_dir = 'C:/xampp/php/smarty/cache/'; } return $smarty; } ?>

    • ベストアンサー
    • PHP
  • PHP フォームからのデータが文字化け

    PHPにて簡単な以下のようなアプリを勉強がてら作っています。 1.登録フォームを表示 2.確認画面表示 3.DB(MySQL)にデータ登録 そこで質問なのですが、フォームから入力し確認画面を表示するときに、フォームから入力した文字が文字化けしてしまいます(正確には文字化けする時としない時があります)。 出力ページはSmartyを使っています。 テンプレートはUTF-8を使っており、テンプレート内の文字は文字化けしません。PHPソースもUTF-8で書いてあります。 各PHPソースには mb_language("uni"); mb_internal_encoding("UTF-8"); mb_http_output("UTF-8"); と記述しています。 DB(MySQL)のテーブルはUTF-8にしてあります。 1点気になるのは、某ホスティングサービス上で作っているのですが、PHPinfoで見てみるとmb_internal_encodingはEUC-JPになっています。 今回UTF-8で作りたいのですがどうしたら良いのでしょうか? 環境は、 Apache 1.3.34 / PHP 4.3.7 / MySQL 4.1.21 です。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • html + php 文字化けの問題【utf-8】

    文字化けが直りません。どうしたらいいでしょうか? phpとmysqlをつかってデータベース表示させるページなのですが、データベースの文字コードがutf-8なのでphpファイルの文字コードをeucからutf-8に変更しました。そうするとデータベースは正常に表示されるのですが、htmlの部分は全て「?」になってしまいます。 文字コードの変換はEmEditorで変更し、変化が見られなかったので、変換用のフリーソフトを使ってみましたが、やっぱり文字化けの状態です。どなたかご教授ください。お願いします。

    • 締切済み
    • PHP
  • ajaxを使用した場合にPHP出力文字の文字化け

    サーバー側をPHPにしてajaxシステムを作ろうと思っています。 サーバからのデータ取得時にResponseTextを使用しており、ブラウザの表示での文字化けで困っています。 WinXP SP2 IE6.0では、UTF-8なら表示できますがEUC-JPは文字化けします。 しかし、Win2K IE5.0とWinX PSP1 IE6.0では、UTF-8は文字化けし、EUC-JPなら表示されます。 こっちを立てればあちらが立たずという状況で困っています。 また、直接XMLファイルやテキストファイルを作成し、これを読み込むと どのパソコンでも表示することができました。 phpから出力した文字がうまい具合に読めないのです。 ちなみにRespondeXMLを使用する場合、 XMLファイルを直接読み込むと内容を取得できるのですが、 PHPから出力したXMLデータを取得すると何も表示されません。 いい解決方法はないでしょうか。よろしくお願いいたします。 サーバシステム fedoraCore3 Apache 2.0 PHP 4.3.11 php.iniの文字コード設定はEUC-JP用にしています。

  • MySQL4.0 UTF-8 での文字化け

    こんにちは MySQL4.0 & PHP4.3 でHTMLは文字コードUTF-8で記述しています。 MySQL4.0の文字コード設定はレンタルサーバーのため不明ですが、 phpMyAdminで、utf-8にてデータを入力しました。 select文でMySQLのデータを拾ってくると文字化けはおきないのですが PHP経由でPOSTされた値を使ってinsertやupdateをかけると文字化けしてしまいます。phpMyAdmin上でも文字化けしていますが、phpMyAdminをEUC-JPにすると、入力した文字が文字化けせずに表示されます。 (が、すでに入っているデータは文字化けします、、、、) 入力画面は metaでUTF-8宣言をしており、ブラウザ(IE)上でエンコードを確認するとUnicode(UTF-8)になっています。4.1みたいにset names を指定するとうまくいくかな?と思ったのですが、やっぱり4.0なので結果は変わらず、でした。PHPのスクリプトそのものは、UTF-8で記述しているのですが、、、、 どういった項目をみなおせばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • 急に文字化けを起こすようになりました

    こんにちは。 さて、過去2年間位、特に問題のなかったページで、突如文字化けを起こすようになりました。 ・mysqlバージョン・・・申し訳ないのですが、今(深夜ゆえ)分かりません。 ・mysqlの文字コード・・・EUC ・HPの文字コード・・・UTF-8 サーバー側にデータベースの破損等聞いても、特に問題はないと言われました。 mb_convert_encoding($v,'UTF-8','EUC-JP'); を mb_convert_encoding($v,'UTF-8',"EUC-JP,UTF-8,auto"); にしたり、色々やっても変わりません。 本当に2年間位は、正常だったのです。特に設定もいじってません。 情報が不足しているかとは思いますが、(会社に行けばバージョンなど分かります。) 何が原因なのか、思いつく事があれば、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPの文字コード方針の決め方・注意点

    PHPを学んで一ヶ月の初心者です。 そろそろ実際に開発を行おうと思っているのですが、 自分の中での文字コードの方針がまとまらないので、 アドバイス頂きたいです。 文字化けに関する解釈があいまいだと、 今後、文字化けに泣きそうな気がするので…;; 現状は、Moabletypeをよく使うので、 htmlの文字コードは、ほぼutf-8を利用しています。 文字コードに関して、サイトや本でいろいろ調べていると、 今後は、PHP周辺の文字コードをutf-8を中心に考えていった方が良いようにお見受けしました。 ただ、よく使っているサーバーがXサーバーで mysqlの文字コード設定がeuc-jpのようですので、 下記のような考え方で間違いないか不安に思っています。。 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* PHP(プログラムファイル) →utf-8 Mysql → euc-jp パソコンの出力先ページ(html、php) → utf-8 携帯の出力先ページ → shift-jis -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ローカルでの開発段階、 また、mysqlがEUC-jpサーバーへの実装等などを考えた場合の、 各ファイルの文字コードの考え方。 また、1つの開発システム内で、 複数の文字コードを扱う際の注意点などあればご教授ください。 よろしくお願いいたしますm(;;)m

    • ベストアンサー
    • PHP
  • PHP+smartyで文字化け

    PHP+smartyでサイトを作成し始めました。(以下URL) http://babyitem.info/ PHPファイル、テンプレート共に、文字コードはEUCで作成しています。 サーバーは、ロリポップをレンタルしています。 index.phpは以下の通りです。 ----------------------------------------------------------- <?php $contents_title="ベビーアイテム.info"; $tpl->assign("contents_title",$contents_title); $tpl->display("babyitem.tpl"); ?> ----------------------------------------------------------- babyitem.tpl(上記サイト左の部分)は以下の通りです。 ----------------------------------------------------------- <div id="left"> <div class="left_top">{$contents_title}</div> <div class="left_bottom"></div> </div> ----------------------------------------------------------- テンプレートファイルの{$contents_title}に 「ベビーアイテム.info」という文字をassignしているのですが、 文字化けして表示されてしまいます。 ちなみに、「babyitem.info」という文字をassignすると、 そのまま、「babyitem.info」と表示されます。 正しく表示する為には、どの辺りの設定を確認すれば良いでしょうか? ご教授くださいませ。

    • 締切済み
    • PHP
  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVファイルのデータが、データベース上で文字化け

    CSVファイルのデータが、データベース上で文字化けする現象を解決したい! CSVファイルは、任意の場所にFTPソフトを使用してアップロードし、プログラム上でCSVを読み込むという手順です。 ■開発関係情報 phpは使用しておらず開発はperlを使用 開発プログラムの文字コードはEUC-JPで、出力されるHTMLの文字コードはShift-JISです。 (1)hetemlに設置した場合は正常に動作しました。 予め作成されていたデータベースのエクスポートファイルをインポートしてテーブルを作成しましたがインポート時のファイルの文字セットは「utf8」で、コーディングへの変換は「non」で実行しています。 MySQLバージョン:5.0.82 MySQLの文字セット:UTF-8 Unicode(utf8) MySQLの接続照合順序:utf8_unocode_ci phpMyAdmin - 2.11.11.3 MySQL クライアントのバージョン: 4.0.25 (2)無料のレンタルサーバー(国外)に設置すると文字化けします。 (1)と同じ手順で行うと、データベース上でCSVデータの日本語が文字化けします。 MySQLバージョン:5.1.65-cll MySQLの文字セット:UTF-8 Unicode(utf8) MySQLの接続照合順序:utf8_unocode_ci phpMyAdmin - 3.4.11.1 MySQL クライアントのバージョン: 4.1.22 そこでCSVをFTPでアップせずデータベースでインポート(ファイルの文字セット:utf-8、エンコーディングの変換なし)しようとすると「CSV入力のカラム数が不正です」というエラーになります。 色々と調べていると、文字コードをすべてEUCに統一すると文字化け解決と書いてあったので、CSVファイル・MySQLの接続照合順序・インポートするときの文字セットなどの思い当るところ全てをEUCに指定して、エンコーディングへの変換を「EUC」に「全角カナへ変換する」にチェックを入れて実行してみても、やはり「CSV入力のカラム数が不正です」エラーになります。 この時、フォーマット項目で「LOAD DATA文を使用したCSVの読み込み」を選択し、特有のオプションで「カラムの終端記号」を「,」「カラム囲み記号」を「"」に設定して、CSVファイルでは区切りを「,」と「","」の2パターンで試しても同じエラーでした。 また、気になる点としては、MySQLの文字セットはUTF-8のままでどうやって変更するのかがわかりません。 開発にphpは使用していなくても、phpmyadminを使用しているということはphp.iniの設定が必要ですよね? php.iniの設定は、権限が与えられていなければサーバー側で設定を行ってもらう必要があるのでしょうか?(初歩的な事ですみません) 試行錯誤していますが、解決法が分からず困っています。 どなたかご教示いただけませんでしょうか。 何卒よろしくお願い致します。

専門家に質問してみよう