データの文字化けに関する問題

このQ&Aのポイント
  • Web上にCSVファイルを置いてPHPで作ったサイトからデータを入力する際に、文字化けが起きてしまう問題が発生しています。
  • 特に、入力後に¥マーク(半角のえんマーク)が入るようになり、データを編集し保存するたびに¥マークの数が増えていく現象が起きています。
  • この現象の原因は、SHIFT-JISのCSVデータをUTF-8で表示させるために行ったmb_convert_variablesというPHPの記述にある可能性があります。
回答を見る
  • ベストアンサー

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

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
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

とりあえず、円マークが出てしまう事を回避したいだけなら、 stripslashes() すればいいです。 いまググってみて見つけた分かりやすそうな説明はこちら。↓ http://nyx.pu1.net/function/strings/stripslashes.html その円マークは 昔 S-JISでコード書いてたときは、よく出くわしましたね。 イマイチ、うまく説明できる自信がないので、はしょりますが その円マークはエスケープ文字です。 mb_convert_variables() は 普段使った事がないので、ググってみて知りえた程度の知識しかありません。 俺は mb_convert_encoding() のほうをよく使います。 なので、原因は 正直 よく分かりません。

raging-rlurry
質問者

お礼

ありがとうございます。 教えていただいた方法で円マークが消えました。 助かりました。 何度か再編集と保存を繰り返したデータには保存した回数分の大量の円マークが発生していて、そのデータに関しては円マークが表示されましたが、そこは手動で消すことで円マークを1つに減らすことができ(どうしても保存時に1つは入っちゃうんですよね)Web表示上は円マークが消えました。 私も最初に検索した時は mb_convert_encoding() をみつけたのですが 書き込んでみたところ上手くいかず なぜかmb_convert_variables() でUTF-8化が上手くいきました。 多分、mb_convert_encoding() の記述や使い方等を間違ったのだとは思いますが、PHPは全く素人で、どこが間違っているのか解りませんでした。 今回のPHPも知人に作ってもらったもので、その知人も原因が解らず困っていたところ、今回のアドバイスをいただき、大変助かりました。 本当にありがとうございました。

関連するQ&A

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

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

    • 締切済み
    • PHP
  • defineの出力先で文字化け

    define('○○','<a href="http://www.goo.ne.jp" target="_blank">Goo</a>'); とすると出力先のソースで &lt;a href=&quot;http://www.goo.ne.jp&quot; target=&quot;_blank&quot;&gt;○○&lt;/a&gt; となってしまい <a href="http://www.goo.ne.jp" target="_blank">Goo</a> がそのままの形で表示されてしまいます。 どうしてこうなるのでしょうか。

    • ベストアンサー
    • PHP
  • 文字だけのバナー???

    ブログやってるんですがクリックするとトップページに飛べるようにHPみたいに「TOP」と入れたいんですが、 <A HREF="サイトアドレス" TARGET="_blank" title=""> でやると文字が出ないです・・・ 「TOP」と入れるにはどうすればいいですか?? バナーのやり方は知ってますがバナーでなく文字だけでやりたいです。

  • スタイルシートの事で?

    カテゴリが違うかもしれませんがお願いします。 下記のタグを表示させると <ul> <li><a href="http://1.com/" target="_blank">テスト1</a></li> <li><a href="http://12.com/" target="_blank">テスト2</a></li> <li><a href="http://123.com/" target="_blank">テスト3</a></li> <li><a href="http://1234.com/" target="_blank">テスト4</a></li> <li><a href="http://12345.com/" target="_blank">テスト5</a></li> <li><a href="http://123456.com/" target="_blank">テスト6</a></li> </ul>  ・テスト1  ・テスト2  ・テスト3  ・テスト4  ・テスト5  ・テスト6 このように表示されますが、スタイルシートを使って下記のように中央で折り返して表示させるにはどうすればいいでしょうか?  ・テスト1 ・テスト4  ・テスト2 ・テスト5  ・テスト3 ・テスト6 よろしくお願いします。

  • 文字コード(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
  • 文字エンコードについて

    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
  • 文字化け

    文字コードをEUCにて統一しているにも関わらず、 結果画面をみると下記のように化けてしまいます。 原因を教えて頂きたく思います。 よろしくお願いします。 データを表示する ID 名前 出身 年齢 1 ???? ??? 30 2 ???? ??? 20 <html> <head> <title>データを表示する</title> </head> <body> <h3>データを表示する</h3> <?php // 表示文字コード $disp_enc = "EUC-JP"; // データの文字コードを変換する関数 function cnv_dbstring($string, $enc) { // 文字コードを変換する $det_enc = mb_detect_encoding($string); if ($det_enc and $det_enc != $enc) { return mb_convert_encoding($string, $enc, $det_enc); return mb_convert_encoding($string, $enc, $det_enc); } else { return $string; } [DB接続部分省略] // 取り出したデータを表示する echo "<table border=\"1\">"; echo "<tr>"; echo "<td>ID</td>"; echo "<td>名前</td>"; echo "<td>出身</td>"; echo "<td>年齢</td>"; echo "</tr>"; while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_dbstring($row["nam"], $disp_enc)."</td>"; echo "<td>".cnv_dbstring($row["pre"], $disp_enc)."</td>"; echo "<td>".$row["ag"]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html>

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

    php4で以下のプログラムを実行したら、IEの設定で文字コードをどれにしても文字化けします。 文字化けしない方法はあるのでしょうか? よろしくお願いします。 <?php $str = "あいうえお"; $str = mb_convert_kana($str,"KV"); echo "$str\n"; ?>

    • ベストアンサー
    • PHP
  • 文字リンクの設定について。

    文字リンクの設定っていろいろありますが、いったいどう違うのでしょう? 例えば・・・ <a href="リンクしたいURL" target="_blank">ここだよ</a> や、 <a href="www.***.***.com">ここだよ</a> など・・・ もしかして、それぞれサイトの設定によってはできるものと、できないものが、あるんでしょうか? これだったらどこでも設定可能!というリンクの貼り方がありましたら教えていただけないでしょうか? よろしくお願いします。

  • URLを見つけたら自動でリンク、タイトルを取得する

    よろしくお願い致します。 ------------- 引用元:http://aaa、http://bbb、http://ccc ------------- という文字列がある場合 ------------- 引用元:<a href="http://aaa" target="_blank">タイトルaaa</a>、<a href="http://bbb" target="_blank">タイトルbbb</a>、<a href="http://ccc" target="_blank">タイトルccc</a> ------------- に置き換える方法を考えています。 ------------- <?php // 対象文字列 $text = '引用元:http://aaa、http://bbb、http://ccc'; // パターン $pattern = '/((?:https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/u'; // 置換後の文字列 $replacement = '<a href="\1">\1</a>'; // 置換 $text= preg_replace($pattern,$replacement,$text); // 出力 echo $text; ?> ------------- で ------------- 引用元:<a href="http://aaa" target="_blank">http://aaa</a>、<a href="http://bbb" target="_blank">http://bbb</a>、<a href="http://ccc" target="_blank">http://ccc</a> ------------- までは行けたのですが、タイトルを取得する方法が分かりません。 http://otapps.net/archives/305 こちらを参考に考えたのですが、先に進めずにいます。 分かる方がいらっしゃいましたら、ご教示ください。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう