• ベストアンサー

文字化けを直すには

現在、文字列で名前を検索してデータファイルを 開いてその名前のデータを表示するというのを作っているのですが、 名前が文字化けしてしまい困っています。 名前はスカラー変数に入ってて、    print "<tr><td>$name</td></tr>"; こんな感じで表示しているんですけど、 $nameに特定の文字がはいっていると    特性の文字・td></tr> このように文字化けみたいなことがおきてしまいます。 どうすれば回避できるのでしょうか? よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

print "<tr><td>"; print $name; print "</td></tr>"; でどうでしょうか?

if_else
質問者

お礼

やってみましたが、依然として文字化けのような状態が 続いていました。 自分なりにいろいろといじってみます。 ありがとうございました。

その他の回答 (1)

回答No.2

スクリプトの全貌や、どのような文字が化けるのかがわからないと、回答は難しいです。 化ける原因はたいてい文字コードの相違です。スクリプト、利用している外部のテンプレートファイル、$nameがどの文字コードで書かれているか、注意深く調べてみて下さい。どこかに相違があるのではないでしょうか。

if_else
質問者

お礼

我流でがんばってみます。 ありがとうございました。

関連するQ&A

  • foreachで一致した説明文を表示(初心

    この間ポケモン図鑑について質問させていただいた者です。(ID違いますけど^^; http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649007 変な質問をしてるかもしれませんm(_ _)m @list内には 手持ち・・(略)<>あくしゅう<> ほのお・こお・・<>あついしぼう<> 戦頭に出ると・・<>あめふらし<> このように1つ目に説明文、2つ目に(特性の)名前が入っています。 それを、 foreach(@list){ ($content,$name)=split(/<>/); } こんな感じでスカラー変数に代入してるのですが、 各ポケモンのデータを表示するページで説明文を表示するにはどうすればいいのでしょうか? 「$end_tokuse」というスカラー変数にあらかじめ各ポケモンの特性の名前は入っていて、それを上の処理と一致するか、しないかでこんな感じで print <<EOM; <table><tr><td> EOM ここに上の処理を print <<EOM; </td></tr></table> EOM 持って来て表示させようかと思っていたのですが、表示するデータの量がほかにもたくさんありすぎていちいち切っていると 編集が大変面倒になるので、一致した説明文をスカラー変数に代入して print <<EOM; <table><tr><td> $setume </td></tr></table> EOM このようにしたいのですが、どうすればいいかわかりません。 一致した説明文をスカラー変数に代入して表示させるにはどうすればいいですか。 わかりにくいですがよろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPとMySQLの文字化けの対応法は?

    OSはWinXPで、MySQL+PHPのアプリを作成しているところです。 <html> <head><title>配列データの取得</title></head> <body> <table border="1"> <tr><td>題名</td><td>著者</td><td>出版社</td></tr> <?php $host = "localhost"; if (!$conn = mysql_connect($host, "user", "pass")){ die("MySQL接続エラー.<br />"); } mysql_select_db("kisop", $conn); $sql = "SELECT * FROM book_table LIMIT 10"; $res = mysql_query($sql,$conn); while($row = mysql_fetch_array($res)) { print("<tr>"); print("<td>".$row["btitle"]."</td>"); print("<td>".$row["bauth"]."</td>"); print("<td>".$row["bpub"]."</td>"); print("</tr>\n"); } mysql_free_result($res); ?> </table> </body> </html> と、こんな演習をしているのですが、ブラウザに表示させると文字化けしました。 HTML文はEUC、MySQLのデータは、シフトJISで入っていたようです。 そのため、「題名」「著者」などの見出しと、取り出したデータを同時に文字化けさせずに、表示できない 状態です(泣)。 MySQLからデータを取り出すときに、mb_convert_encodingで文字コードを変換してやれば 化けないでしょうが、出力しようとするデータのすべてを変換しなければなりません。 プログラマーさんたちは、文字化けの現象について、どう対応されているのでしょうか? いちいち、mb_convert_encodingで、変換しているものなのでしょうか? 定石のようなものを知りたいところです。 たとえば、HTML文は文字コード○○を使うものだ、設定ファイルを書き換えておく、などなど。 よろしくおねがいします。

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

    PHP3について質問です。 php4でprint "<td>$value</td>\n";するとうまく表示されるのですが、php-3.0.18-i18n-ja-3だと文字化けしてしまいます。"輔"や"子"などです。解決策を探しています。お願いします。

    • 締切済み
    • PHP
  • mailtoで、文字化けを防ぎ、メーラーに内容記述

    Formタグ内に記述してもらった項目に対する内容を、文字化けさせずに ユーザーのメーラーを立ち上げ、内容を記述し、 ユーザーにメール内容確認後、設定したアドレスに送信してもらいたいと考えております。 <フォーム内容> <form enctype="text/plain" action="mailto:xxx@xxxx.ne.jp" method="POST" name="form1"> <table> <tr><td>姓名</td> <td><input size="40" name="001_seimei"></td></tr> <tr><td>名前</td> <td><input size="40" name="002_namae"></td></tr> <tr><td>年齢</td> <td><input size="40" name="002_nenrei"></td></tr> <tr><td colspan="2"><input type="submit" name="submit" value="送信"></td></tr> </table> </form> 送信ボタンを押したときに、メーラーが立ち上がりはするのですが 内容が文字化けします。 姓名:てすと1 名前:てすと2 年齢:35 <メーラーに記述されている内容> 001_seimei=???? 002_namae=??? 003_nenrei=??? 一度、 文字化けしないように文字処理して、 メーラーを立ち上げたいと考えているのですが、 phpでどのような処理を記述すれば、いいものなのでしょうか? 想像がつかず困っております…。 今回仕様上、 「入力されたフォーム内容を、ユーザーのメーラーを立ち上げ内容を記述」⇒ 「ユーザーが内容確認後メールを送信」という、流れは変更することができません。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • 文字化けを直す方法

    ホームページ作成中です。 あるCGIで出来たリストの一部だけをSSIで表示させようとしています。 イメージとしては買い物籠CGIの登録されている商品名だけを一覧表示みたいなものです。 リストのdatファイルは「EUC」で保存されています。 下の表示させるCGIと表示先のhtmlは「S-JIS」で保存しています。 リスト表示は他のCGIからコピーして少々変更しただけの物です。 ------------------------ #!/usr/bin/perl require './jcode.pl'; #jcode::convert(\$str, 'euc', $code); print "<center>\n"; print "<TABLE>\n"; print "<TR><TD>語録一覧</TD>\n"; print "</TR>\n"; print "<TR><TD>\n"; open (FILE2,"./data/word.dat"); @file = <FILE2>; close FILE2; $no = -1; foreach (@file) { $no++; # local($file,$number,$word,$yomi)= split /\t/,$data[$i]; local($file,$number,$word,$yomi)= split /\t/; print "$word<BR>\n"; } print "</td></TR>\n"; print "</table>\n"; print "</CENTER>\n"; exit; ------------------------------- こうすると、リスト($word)が文字化けします。(英数は化けずに表示。って当たり前ですね) どうにかしてEUCのリストのみ表示するときS-JISに変換する方法などないでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • ソース中の文字列と、DBから取得した文字列を同時に表示すると文字化け

    perl 5.8.6を使用しています。 MySQLから取り出したデータを、ソース中の文字列と同じprint文の中で 表示させようとした場合に文字化けしてしまいます。 文字コードはMySQL, ソースファイルともUnicode(UTF-8)を使用しています。 具体的には $a[0] にデータベースから取り出した文字列が入っているとすると、 ソース中で print "テスト:$a[0]"; とか print <<END_OF_TEXT; テスト:$a[0] END_OF_HTML とすると、$a[0]の部分が文字化けしてしまうのですが、 print "テスト:"; print "$a[0]"; と書くと、文字化けせずに表示されます。 ちょっと日本語を使ったり、データベースから取り出した文字列を使う箇所が多いプログラムなので、ひとつひとつprint文を分けるのは大変なので避けたいです。 何か文字化けしない回避策や、原因について考えられることがありましたら教えていただけると大変助かります。

    • ベストアンサー
    • Perl
  • 文字化け

    文字コードを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
  • テキストを表示すると文字化けする

    まず、HTMLから !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>メール送信フォーム</title> </head> <body> <h2>メール送信フォーム</h2> <form action="conf.jsp" method="POST"> <table summary="" border="0"> <tr> <td>お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="from" size="20"></td> </tr> <tr> <td>メールタイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea rows="5" name="message" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value="内容の確認"></td> </tr> </table> </form> </body> </html> それを受けるconf.jspで文字化けします。 が、1つ文字化けせずに表示する方法があります。 <%@ page language="java" contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>メール送信フォーム</title> </head> <body> <h2>メール送信内容確認画面</h2> <% request.setCharacterEncoding("Shift-JIS"); ↑ここですね↑見にくくてすいません。 ここでShift_JISに変換されてちゃんと表示されます。 でも、これは後から付け加えたものでソースコードには最初ありませんでした。 //フォームの値を取得 String mName = request.getParameter("name"); String mFrom = request.getParameter("from"); String mTitle = request.getParameter("title"); String mNaiyou = request.getParameter("message"); //値をチェック boolean errFlg = false; if (mName.equals(" ")) { out.println("<p>お名前を入力して下さい。"); errFlg = true; } if (mFrom.equals(" ")) { out.println("<p>メールアドレスを入力して下さい。"); errFlg = true; } if (mTitle.equals(" ")) { out.println("<p>タイトルを入力して下さい。"); errFlg = true; } if (mNaiyou.equals(" ")) { out.println("<p>内容を入力して下さい。"); errFlg = true; } if (errFlg == false) { %> <h2>内容を確認して送信ボタンをクリックして下さい</h2> <form action="sendMail.jsp" method="POST"> <table border="0"> <tr> <td width="100">お名前</td> <td width="300"><%= mName %></td> </tr> <tr> <td width="100">メールアドレス</td> <td width="300"><%= mFrom %></td> </tr> <tr> <td width="100">メールタイトル</td> <td width="300"><%= mTitle %></td> </tr> <tr> <td width="100">メッセージ</td> <td width="300"><%= mNaiyou %></td> </tr> <tr> <td colspan="2"><input type="submit" value="送信"></td> </tr> </table> <input type="hidden" name="name" value="<%= mName %>"> <input type="hidden" name="from" value="<%= mFrom %>"> <input type="hidden" name="title" value="<%= mTitle %>"> <input type="hidden" name="message" value="<%= mNaiyou %>"> </form> <% }%> </body> </html> 何故、文字化け状態になるのでしょう。 アドバイス宜しくお願い致します。

  • mysqlの文字化け

    お世話になります。 phpmyadminを使用しており、php内からmysqlに接続しているのですが テーブル内の結果が「????」となり文字化けしてしまいます。 phpmyadmin上では正常に日本語データが表示されます。 テーブルの文字コード:utf_general_ci ソースは以下です。 <?php ~DB接続省略~ // クエリを送信する $sql = "SELECT * FROM table"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //表示するデータを作成 while($row = mysql_fetch_array($result)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["YMD"]. "</td><td>".$row["NAME"]. "</td><td>".$row["OBJECT"]. "</td>"; $tempHtml .= "</tr>\n"; } //結果保持用メモリを開放する mysql_free_result($result); // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。"); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>全件表示</title> </head> <body> <h3>全件表示</h3> <?= $msg ?> <table width = "200" border = "0"> <tr bgcolor="##ccffcc"><td>YMD</td><td>NAME</td><td>OBJECT</td></tr> <?= $tempHtml ?> </table> </body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • 掲示板のコメント欄にあらかじめ文字を入れたい

    掲示板の設置をしています。 掲示板のコメント欄の中に、あらかじめこちらが伺いたいことを表示しておきたいのですが、どのようにしたらできるのでしょうか? sub in_form { print "<table cellspacing=1 cellpadding=0>\n"; print "<form action=\"$script\" method=POST enctype=\"multipart/form-data\">\n"; print "<input type=hidden name=mode value=\"newwrt\">\n"; &getcook; if (!$mode) { $submit = '投稿する'; } else { print "<input type=hidden name=rno value=\"$in{'no'}\">\n"; $submit = '返信する'; } print "<tr><td>名前</td><td><input type=text size=30 name=name value=\"$name\" style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td>HP</td><td><input type=text size=50 name=hp value=\"http://$hp\"></td></tr>\n"; print "<tr><td>題名</td><td><input type=text size=50 name=sub style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td valign=top><br>内容</td><td><textarea cols=65 rows=8 name=com style=\"ime-mode:active;\"></textarea></td></tr>\n"; print "<tr><td>画像</td><td><input type=file size=60 name=img></td></tr>\n"; print "<tr><td>削除キー</td><td><input type=password size=10 maxlength=8 name=pwd value=\"$pwd\"> (英数8文字以内)</td></tr>\n"; print "<tr><td></td><td><input type=submit value=\"$submit\"></td></tr></table></form>\n"; } おそらくこの部分を変えるのかなぁと思うのですが・・・どうすればいいのかわかりません。どなたかアドバイスいただけるとうれしいです。 よろしくお願い申し上げます。

    • ベストアンサー
    • CGI

専門家に質問してみよう