• 締切済み

PHPの文字化けについて教えてください。

文字を表示しようとすると、 縺ョ螂ウ蟄 このような文字化けが起こるので $a =mb_convert_variables('utf-8' , 'sjis' , $item[0]); echo $a こうしてエンコードしたのですが、結果をみると SJIS とだけしか表示されません。どこか間違えているのでしょうか? CSSも使っているのですが、そちらも何か関係しているのでしょうか?

  • PHP
  • 回答数5
  • ありがとう数0

みんなの回答

回答No.5

mb_convert_variables は 成功時に変換前の文字エンコーディングを返し、失敗した場合に FALSE を返します。 なので、SJISが$aに入ります。 4の方の仰るとおり、参照渡しなので$item[0]の内容が書き換わっているはずです。 もし、返り値を受けて変換したいのなら、かわりに mb_convert_encoding を使って $a = mb_convert_encoding($item[0], 'UTF-8' , 'SJIS'); としてやれば、$aに変換後の値が入ります。

回答No.4

こんばんは。 まず、 $a =mb_convert_variables('utf-8' , 'sjis' , $item[0]); ここで$aには、変換前のエンコーディング、即ちsjisが返ってきます。 なので、 echo $a が SJIS は、正しい動作です。 次に、第三引数が参照渡しなので、 echo $item[0] とすると変わっているはずですが、ここで$itemが配列のため、書き換わらない現象が発生します・・・。 $a = $item[0]; mb_convert_variables('utf-8' , 'sjis' , $a); echo $a; スカラーにして渡してやるといいかも知れませんね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

単にコンバート後の文字コードが認識されてないだけでは? 出力するphpの先頭に header("Content-Type:text/html;charset=utf-8"); を入れたり、 htmlのヘッダーに <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> を書いたり、 それでもだめならブラウザで文字エンコードで任意にutf-8を選んでもだめでしょうか?

回答No.2

やりたいことはこっちじゃないの? http://www.php.net/manual/ja/function.mb-convert-encoding.php

回答No.1

$aは、元の文字エンコーディングが入ります。 mb_convert_variables()の第三引数以降は参照渡しの為、 $item[0]が直接変換されます。 echo $item[0]; で予想してた結果が出るのでは。 http://php.net/manual/ja/function.mb-convert-variables.php

syarol
質問者

補足

echo $item[0]; としてみたら、変換されずに文字化けしたまま表示されました。 これは文字コードを間違えているということでしょうか?

関連するQ&A

  • データの文字化けについて

    Web上にCSVファイルを置いてPHPで作ったサイトからデータを入力しています。 いつからか、入力後に¥マーク(半角のえんマーク)が入るようになってしまいました。 場所は <a href="アドレス" target="_blank">テスト</a> だとすると <a href=\"アドレス\" target=\"_blank\">テスト</a> のように「 " 」の右隣に入ります。 そのデータを開いて編集し保存をするたびに¥マークの数が増えていく感じです。 また、特定の文字でも同じ現象がおこるようで 例えば「ソニー」と入力して保存すると 「ソ\ニー」となります。 原因として思い当たるのが SHIFT-JISのCSVデータを、どうにかしてUFT-8でWebに表示させるために <?php echo $*********[0][0]; ?> という記述を <?php mb_convert_variables("UTF-8","SJIS",$*********); echo $*********[0][0]; ?> とPHPのファイルをいじった時期に重なります。 私自身、PHPは全く解らず 自力でネット検索し対応したためmb_convert_variablesというのが どういうことをするモノなのか解りません。 文字化け表示を直すためにmb_convert_variablesを使いましたが これはデータベースの中身を書き換えてしまうのでしょうか? 今回の現象はmb_convert_variablesが原因でしょうか? それとも、他に原因がありますでしょうか? 現在、応急処置として <a href=アドレス target=_blank>テスト</a>と 「 " 」を使わない方法で対応していますが 「ソ\ニー」のように特定の文字に関しては対応方法もなく困っております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • 文字化けしてしまいます。

    ~の文字が文字化けして、どうしても解決ができません。 どなたかお分かりになる方、アドバイスをよろしくお願いいたします。 PHP5、Xampp、XP の開発環境になります。 実は出勤時間をPCからと携帯からの両方で管理しようと思っています。 データ保存用ファイルは、utf-8のtxtファイルになります。 すべてをutf-8のファイルで作ることができれば、問題は起きてこないわけですが、携帯が かかわってきており、sjisを使わざるを得ません。かといって、すべてのファイルをSJISにするのも これまた、ダメ文字の関係でそれもできません。 そこで、携帯だけはsjisファイルで作っています。このsjisファイルとutf-8ファイルの間で文字化けが おきてしまいます。 出勤時間を読み込んで、10:00~のようにutfの保存用ファイルから読み込んで、mb_convert_encoding でsjisに変換して表示をします。これは、普通に表示になります。 表示されたファイルは携帯のsjisファイルですので、携帯から出勤時間を変更して保存しようとする 場合、今度はsjisからutf-8に変更して保存する必要があります。 そこで、携帯からutf-8の保存用ファイルに更新した内容を保存する場合にmb_convert_encodingを かけて、utf-8に変換しました。一応、mb_detect_encodingを使ってutf-8に変更されていることも 確かめました。 しかし、保存さているデータは、10:00縲 というように~が縲に文字化けしてしまいます。 この文字化けを回避する方法がお分かりの方、ぜひお知恵をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列のエンコードについて

    例えば以下のコードで日本人がターゲットのサイトを作ったときにエンコードがutf8以外ってありますか?idなどもutf8でなんとかなるのになぜ他の文字コードは必要なのですか? //SJISに変換 $str = "私のidはrxxdtggb63332224667です。"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8"); //SJISに変換 $str = "gcdddyyghgcc.jpg"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8");

    • ベストアンサー
    • PHP
  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • 文字エンコードについて

    Blogの更新をPHPで挑戦してみたのですが、文字化けしちゃって訳がわかりません… PHPのバージョンは5.1.6.6でバッチファイルを使用してます。 色々調べてみた結果Blogの方の文字コードがShift_JISみたいなので (PHPは基本UTF-8ですよね?) mb_convert_encodingかmb_convert_variablesの関数かなと思って使用してみたのですが結果はエラーがおきてしまい↓↓どうしていいのか分かりません、、 mb_convert_encoding(変換したい文字列, "SJIS", "auto"); mb_convert_variables("JIS", "UTF-8", 変換したい文字列); autoのところをUTF-8にしてもおなじでした… もちろん一つずつ試しました。 どなたかいい解決方法を教えて頂けませんか?

    • 締切済み
    • PHP
  • 文字化けが解決できません。お願いします

    文字化けが解決できません 使用データベースはSQLServer2008です 対象カラムはcharです データベースの照合順序はJapanese_CI_ASです ブラウザのエンコードをUTF-8にするとprint_r($row);の部分は文字化けせずに表示 されますprint("砂糖");は文字化けします ブラウザの標準文字コード??SJISだとprint_r($row);文字化けします print("砂糖");は文字化けしません ということはSQLServerのデータの文字コードがUTF-8ということなのでしょうか SJISだと思うのですが。 そこで、SQLServerがUTF-8だと仮定してprint_r(mb_convert_encoding($row, "SJIS","UTF-8")); というプログラムを書いたのですが結果は同じでブラウザのエンコードをSJISにすると 文字化けしていまいます どうすればブラウザのエンコードがSJISで文字化けしないようになるのでしょうか 教えてください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-SJIS"> <title>test</title> </head> <body> <?php try{ $dsn ='sqlsrv:server=.\sqlexpress;database=sample'; $dbname = "sample"; $user = "sa"; $password ="manager"; //$dbh = new PDO("mssql:host=.\\SQLEXPRESS;dbname=sample",$user,$password); $dbh = new PDO($dsn,$user,$password); $stmt = $dbh->prepare("select * from shohin"); $stmt->execute(); while($row = $stmt->fetch()){ //print_r($row); //print_r(mb_convert_encoding($row, "SJIS","UTF-8")); print_r($row); } unset($dbh); unset($stmt); // foreach($dbh -> query($sql) as $row) // print($row["id"]); // print($row["name"]); // echo "接続できました"; // } // $dbh = null; print("砂糖"); }catch(PDOException $e){ print("Failed to get DB handle:aaakkka".$e->getMessage()."\n"); phpinfo(); exit(); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPとmysqlでの文字化けについて

    現在PHPとMySQLを利用したwebシステムを作成しています。 しかし文字化けが発生して困っています。こちらの環境は PHP5.1.4 MySQL5.1.11 phpMyAdmin - 2.8.0-rc1 レンタルサーバー(xrea)を使っています。 自分でいろいろと調べたところ文字のエンコードはujisに統一したほうがいいとのことまではわかりました。 show variables like "char%"; を実行したところ character_set_client utf8 character_set_connection sjis character_set_database ujis character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 このように表示されます。 PHPの方も <?php header('Content-Type:text/html; charset=EUC-JP'); ?> や <?php $str = mb_convert_encoding($str, "EUC-JP", "auto"); ?> を実行しても日本語の部分は???で表示されてしまいます。 いろいろと調べたのですが、さっぱり原因がわかりません。 よろしくお願いします。

  • 文字コード(UTF-8)文字化けについて

    以下のphpを実行したところ、入力した文字によって文字化けしたりしなかったりします。 どなたか原因が分かる方がいらっしゃったら教えてください。 (見、一は化けない。上、実は化ける。) phpはバージョン5.2.8を使用しています。 (コード)----------------------- <html lang="ja"> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <head> </head> </body> <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $org_text1 = "見"; $org_text2 = "上"; $org_text3 = "実"; $org_text4 = "一"; $telop_text1 = mb_convert_encoding($org_text1,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text2 = mb_convert_encoding($org_text2,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text3 = mb_convert_encoding($org_text3,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text4 = mb_convert_encoding($org_text4,'utf-8','ASCII, JIS, EUC-JP,SJIS'); echo "telop_text1="; echo $telop_text1; echo "<br>"; echo "telop_text2="; echo $telop_text2; echo "<br>"; echo "telop_text3="; echo $telop_text3; echo "<br>"; echo "telop_text4="; echo $telop_text4; ?> </body> </html> (結果)------------------------- telop_text1=見 telop_text2= telop_text3=タ telop_text4=一

    • ベストアンサー
    • PHP
  • MySQLでの文字化けについて

    すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう