• 締切済み

phpからxmlへの文字化け

PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

  • jsqrm
  • お礼率45% (16/35)
  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

flash。PHP。XMLの宣言 の文字コードは統一していますか?

jsqrm
質問者

補足

返信ありがとうございます。 FLASHでSystem.useCodepage = true;でSIFTJISで出力しています。 PHPでは何もエンコードを変えていません。 XMLではutf-8で出力しています。 PHPでSIFTJISをutf-8に変えれれば解決でしょうか?

関連するQ&A

  • php4でのxml上書き

    はじめまして、phpでxmlの上書きをしたいのですが、 phpは <?php $xml_path = "gundam.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "</robot>"; $add_xml = "<gundam>\n<pilot>シーブック</pilot>\n<mobilesuits>ガンダムF91</mobilesuits>\n</gundam>\n".$replace_key; $result = str_replace($replace_key,$add_xml,$xml); $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); ?> xmlは <?xml version="1.0" encoding="Shift_JIS"?> <robot> <gundam> <pilot>アムロ</pilot> <mobilesuits>ガンダム</mobilesuits> </gundam> <gundam> <pilot>カミーユ</pilot> <mobilesuits>Zガンダム</mobilesuits> </gundam> <gundam> <pilot>ジュドー</pilot> <mobilesuits>ガンダムZZ</mobilesuits> </gundam> <gundam> <pilot>コウ</pilot> <mobilesuits>ガンダムGP01</mobilesuits> </gundam> <gundam> <pilot>クリス</pilot> <mobilesuits>ガンダムアレックス</mobilesuits> </gundam> </robot> と書いてあります。 最後にxmlを書き換えた部分を $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); で上書きしたいのですができません。 何が問題なのでしょうか?

    • ベストアンサー
    • PHP
  • sendAndLoadで送信時に

    PHPとFLASHで連携しようと思っています。 PHPは違う人が作っているので書いてある事が分からないのですが 下記のスクリプトを使ってPHPに変数を渡そうとしています。 しかし実行するとPOSTで届かずにGETで届いてしまいます。 どなたか理由が分かる方いませんか? btn_mc.onRelease = function() { var result_xml:XML = new XML(); result_xml.ignoreWhite = true; var SendData = new LoadVars(); SendData.id = id.text; SendData.pass = pass.text; urlpass = url.text; trace([SendData.id, SendData.pass, urlpass]); SendData.sendAndLoad(urlpass,result_xml,"POST"); result_xml.onLoad = function(success) { if (success) { hyouji.text = result_xml; } else { trace("失敗!"); } }; }; stop(); 情報少なくてすいません。

    • ベストアンサー
    • Flash
  • xml中の特殊文字処理について

    phpを使ってxmlを書き出すプログラムを書いたのですがどうしても解決できなくて困っています。具体的な内容は以下のとおりです。 $url = $root->appendChild($dom->createElement('url')); $text = $dom->createTextNode($T_url); $text = $url->appendChild($text); やりたいことは 変数$T_url に 「&」(本来は小文字です。)が含まれた場合そのままxmlに書いて表示させたいですが書き出したxmlをみると「&amp;」という文字列に置き換えて書き出されるのです。 変数$T_urlの内容そのまま書き出したいですがいい方法があればご教授ください。

    • 締切済み
    • PHP
  • phpで読み込んだcsvが文字化けします

    PHPでCSVよ読み込んで名簿を作っています。 出力まではうまくいったのですが、なぜか一字だけ文字化けしてしまいます。(「務」→「冶」になってしまいます) 普段あまりプログラムはしないので、原因がわからず困りはてております。よろしくお願いいたします。 PHP部分の記述は以下になります。 ――――――――――――――――――――――――――――――――――― <?php $fname = "csv/meibo.csv"; $file = fopen($fname, "r"); $nowrap = "nowrap=\"nowrap\""; $tcent = "class=\"center\""; $tbg = "class=\"even\""; while (list($name, $post, $add, $add2, $tel, $http, $url, $mail) = fgetcsv($file, 1000, ",")){ $name = strtr($name, "﨑", "崎"); $add2 = strtr($add2, "﨑", "崎"); $tline ++; if($tline % 2 == 0){ echo "<tr $tbg>\n"; }else{ echo "<tr>\n"; } echo "<td $nowrap>$name</td>\n"; echo "<td $tcent>$post</td>\n"; echo "<td>$add<br />$add2</td>\n"; echo "<td $tcent>$tel</td>\n"; if($http == "http://"){ echo "<td $tcent><a href=\"$http$url\" target=\"_blank\"><img src=\"img/common/img_hp.gif\" alt=\"HPへ\" width=\"16\" height=\"16\" /></a></td>\n"; } else { echo "<td $tcent>&nbsp;</td>\n"; } echo "<td>$mail</td>\n"; echo "</tr>\n"; } fclose($file); ?> ――――――――――――――――――――――――――――――――――― PHP4を利用。 .phpのcharsetはShift_JISで、同じくShift_JISで保存しています。 CSVファイルはエクセルで作りShift_JISで書き出しています。

    • ベストアンサー
    • PHP
  • FLASH1→PHP→FLASH2 POST送信での受け取り方法。

    FLASH 8の初心者です。 Sample.swfにあるボタンから、PHPを通してSample2.swfに値を送ろうとしています。そこで、送った値を判定して、そのフレームに移動するようにしたいと思っています。 現在はFLASH→PHP→FLASHというのはできるのですが、FLASH1→PHP→FLASH2という方法がわかりません。 ■Sample.swfのボタン A.onPress = function() { SendData = new LoadVars(); //データを送信するための箱。 _root.SendData.nakami1 = "sam"; //送りたいデータを箱に詰める //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/Sample/Sample.php", _root.SendData); //3)getFlashからレスポンスが合った場合(SendDataにデータが帰ってきた時) _root.SendData.onLoad = function() { //受け取ったときの処理 if(this.val){    if(this.val1){ gotoAndPlay(2); } } } } これで、PHPに値を送っています。 <?php //2)Flashからデータを受け取る-Flashで使用した変数名 $test1 = $_POST["nakami1"]; //やりたい処理を書く if($test1 == "sam"){ $test1 = "name"; }else{ $test1 = "error"; } //Flashにデータを送る print "&val=true"; //上の結果を表示の実行。 print "&val1=".$test1; //val1に$test1の値を代入。 ?> この書き方でFLASH→PHP→FLASHはできるのですが、これをどのように変更したらFLASH2へ値を送れるのかわかりません。調べてもどのようにすればいいのかわからないので困っています。 FLASH2のほうではsetInterval文を使って、常にPHPからの送られてくる値を取得しようと思っています。 ★setInterval文 functionvar intervalID:Number=setInterval(getFunc,1000); getFunc(){ getURL("http://localhost/test/Sample.php", "_self", "GET"); if(val== "name"){ gotoAndpPay(2); } } このように書いたのですがどのようにすればPHPからの値を取得できるのかわかりません。このような書き方をしなくてもできるのでしょうか? どんなことでもいいので返事をよろしくお願いします・・・。

  • XMLのURLをPHP表示したいのですが

    ご質問失礼いたします。 XMLをPHPで表示させたくて、下記のようにPHPファイルを作りました。 <?php $xmlfile = "xmlのURL"; $article=file_get_contents($xmlfile); echo "<table><tr><td>題名</td><td>リンク</td></tr>"; foreach($article->ItemLookupResponse->Items->Item as $data){ echo "<tr><td>"; echo $data[Title]; echo "</td><td>"; echo $data[ItemLinks->ItemLink asURL]; echo "</td></tr>"; } echo "</table>"; ?> echo $article;//で確認したXML(表示に必要な部分だけに省略させていただきました) <?xml version="1.0" ?> <ItemLookupResponse xmlns="http://www.~"> <Items> <Item> <Title>たいとる</Title> <ItemLinks> <ItemLink> <URL>http://www.~</URL> </ItemLink> </ItemLinks> </Item> </Items> </ItemLookupResponse> しかし、表示されず原因を特定することができません。 XMLだけを表示すると、 「This XML file does not appear to have any style information associated with it. The document tree is shown below.」 とは出ますが、情報はきちんと出ていると・・・思います。 PHPのファイルはページのソースを確認しても問題ないように見えたので、 表示の方法かXMLが違うのか、ご指摘いただければと思います。 すみません、知識が未熟な為、伝わりにくかったら申し訳ございませんが、 何卒お力をいただけたらと思います、宜しくお願い致します。

    • ベストアンサー
    • XML
  • XMLの相対パスの書き方

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <info> <element> <item>Pwd</item> <value>00000000000000</value> </element> <element> <item>Name</item> <value>MyPC</value> </element> </info> </root> こういうXMLファイルの記述があり、itemがNameであるvalueを取りたいといった場合、どういうパスを記述すればよいでしょうか? VBで動くようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • XML
  • xmlデータの編集について

    xmlデータの編集について ******************************************* <?xml version="1.0" encoding="UTF-8" ?> <data> <member_list> <name>メンバー1</name> <age>10歳</age> <email>aaa@a.ne.jp</email> </member_list> <member_list> <name>メンバー2</name> <age>20歳</age> <email>bbb@a.ne.jp</email> </member_list> </data> ***************************************** 上記のような"member.xml"があり、これらをフォームから入力された内容に書き換えたい場合は、どういった処理を行えばいいのでしょうか? if(isset($_POST['add'])){ $xml=simplexml_load_file("member.xml"); $addElm = $xml -> addChild("member_list"); $addElm ->addchild("name",$_POST['names']); $addElm ->addchild("age",$_POST['age']); $addElm ->addchild("email",$_POST['email']); $xml ->asXml("member.xml"); } 追加でしたら上記のような"simplexml"の"addchild"でいけるのですが、書き換える場合の処理がわかりません。 どなたか、ご教授下さいませ。

    • 締切済み
    • PHP
  • PHPで作る掲示板について

    以前にも質問しましたがフォームから日本語を送信すると文字化けが発生します info.phpでPHPのマルチバイト系の設定を確認したとこを下のようになっていました。 サーバは借りているのでphp.iniで設定変更できないため.htaccessで対処しようと したのですがうまくいきませんでした。解決策をお願いします 環境はWin7でPHPのバージョンは 5.3.10です mbstring.detect_order auto mbstring.encoding_translation On mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output UTF-8 mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) mbstring.internal_encoding UTF-8 mbstring.language Japanese Japanese mbstring.script_encoding no value mbstring.strict_detection Off mbstring.substitute_character no value //プログラム <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP

専門家に質問してみよう