• ベストアンサー

PHPページの中に「結構」という文章を入れると・・・

変な発見をしたので、ご教授頂ければと思うのですが、 PHPにて、リストの中からランダムに選んだ文字を出力する というプログラムを作っていたところ、「結構」という文字を リストの中に入れると、エラーが起こってしまいます。 例えば、 "お菓子","九州","英語","結構","回路" とします。これだと、FTPでアップロードした後、 ブラウザで表示させるとエラーになってしまいます。 (Parse error: parse error, expecting `')'' in /home/httpd/vhosts/abc.com/subdomains/sub/httpdocs/test.php on line xxxというメッセージ) そこで、「結構」という文字を「結局」に変えてみます。 "お菓子","九州","英語","結局","回路" こうすると、なぜかエラーは出ず、正常にランダムで選んだ文字が 出力されるのです。 この原因は何でしょうか? もし良かったら、お試し下さい。

  • PHP
  • 回答数3
  • ありがとう数4

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

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

有名なシフトJISの「5c問題」ですね 「構」の文字が「8D 5C」で構成されているため、5Cによって、 シングルクォーテーションがエスケープされています。 本質的な解決方法はシフトJISを使わないということしかありませんが たとえばご利用になっているftpのオプションでおかしくなっている 可能性もあるので、バイナリーモードで転送するなどで対応ができるかも しれません

di-keichu
質問者

お礼

お返事が遅くなり申し訳ございません・・・ 5c問題という存在を初めて知り、勉強致しました。 文字コードをシフトJIS以外に設定する事で問題を回避できました。 ご回答ありがとうございました。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

構はShift JISのダメ文字のひとつですね 文字コード内部に 0x5C ('\')を含む文字はエスケープされるので文字化けしたりエラーの原因になったりします。 他にも'表'や'能'などがあります。 "結構\" のように後ろに\を追加すると大丈夫です。

di-keichu
質問者

お礼

お返事が遅くなり申し訳ございません・・・ 5c問題という存在を初めて知り、勉強致しました。 おっしゃる通り、文字コードをシフトJIS以外に設定する事で 問題を回避できました。 ご回答ありがとうございました。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

使っている文字コードとPHP環境はどういうようにしていますか? 手っ取り早いのは、文字コードをUTF-8にすれば直るでしょう。

di-keichu
質問者

お礼

お返事が遅くなり申し訳ございません・・・ 5c問題という存在を初めて知り、勉強致しました。 おっしゃる通り、文字コードをシフトJIS以外に設定する事で 問題を回避できました。 ご回答ありがとうございました。

関連するQ&A

  • PEARのインストール方法

    レンタルサーバーにPEARをインストールしたいのですが エラーが表示され途中で止まってしまいます。 サーバーはxbitでApache/2.0.46,PHP 4.3.9,mysql 4.1.20です。 試した方法は以下の通りです。 1:http://pear.php.net/go-pearをgo-pear.phpとして保存 2:httpdocs/gooo_pear/go-pear.phpとしてサーバーへアップ 3:ブラウザからhttpdocs/gooo_pear/go-pear.phpにアクセス 4:httpdocs/gooo_pear/のパーミッションを777に変更 5:NEXTをクリックしパラメーターの変更をしていない状態で 最下部のインストールボタンをクリック するとページ上部に Warning: putenv(): Safe Mode warning: Cannot set environment variable 'TMPDIR' - it's not in the allowed list in /home/httpd/vhosts/ドメイン.com/httpdocs/go_pear/go-pear.php on line 1264 と表示されローディングバーの下に Warning: putenv(): Safe Mode warning: Cannot set environment variable 'TMPDIR' - it's not in the allowed list in /home/httpd/vhosts/ドメイン.com/httpdocs/go_pear/go-pear.php on line 1264 と表示されローディングバーが40%になると Fatal error: Cannot redeclare class pear_command_common:pear_command_channels in /home/httpd/vhosts/ドメイン.com/httpdocs/go/temp/PEAR/Command/Channels.php on line 43 と表示されストップしてしまいます。 何度か試してみたのですが結果は同じでマニュアルにも 目を通してみたのですが原因がわかりませんでした。 xbit側でpearは使えるようなのですがライブラリが限られており 独自でインストールしたく思っております。 エラーメッセージを調べてみても英語のページが何件か見つかる 程度で情報が得れなく初めてなものでどうしていいものか全く わからずです^^; 詳しい方がおりましたら宜しくお願い致します。

    • 締切済み
    • PHP
  • PHP5で配列の初期宣言の書き方で失念しまして、エラーになります。

    PHP5で配列の初期宣言の書き方で失念しまして、エラーになります。 $test = array( [1, 2, 3], [4, 5, 6] ); Parse error: parse error, expecting `')'' in という書き方はエラーになりますが、省略タイプ[]で データを宣言する方法が知りたいです。 for ($i = 0; $i < count($test); $i++) { print($test[$i][0] . " " . $test[$i][1] . " ". $test[$i][2]); } で 1 2 3 4 5 6 と表示させたいです。

    • ベストアンサー
    • PHP
  • コンパイルエラー???

    どなたか分かる方いらっしゃいましたら ご助言宜しくお願いします。 PHPソース自体には何も問題は無いのですが、たまにParse errorが出てしまいます。 「Parse error: syntax error, unexpected T_STRING, expecting ')' 」 エラーが出ても、何度かリロードを繰り返すと正しく表示されます。 なぜこのような現象がおきてしまうのか、調べても分からない状態です。 どなたか解決策をご存知の方宜しくお願いします。 動作環境 CentOS3.8 apache2.2.4 php4.4.8 Mysql5.0.27 文字コードはeuc-jpで統一

    • 締切済み
    • PHP
  • 「CGIモード」から「モジュールモード」のサーバーに移したら動きません

    「CGIモード」から「モジュールモード」のサーバーに移したら動きません。 すみません。お願いします。エラーログは下記です。 PHP Notice: Undefined variable: page in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 141 PHP Notice: Undefined variable: search_param in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 152 PHP Notice: Undefined variable: inq_param in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 152 PHP Notice: Undefined variable: did_param in /var/www/vhosts/examplee.com/httpdocs/db/connect.inc on line 152 PHP Notice: Undefined variable: search_flg in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 152 PHP Warning: fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 156 PHP Warning: fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to www.example.jp:80 (Unknown error) in /var/www/vhosts/example.com/httpdocs/db/connect.inc on line 156 変数に値が入らず、必要なアドレス?が引っ張れず、相手(www.example.jp)とやり取りできない・・・的なエラーでしょうか。 フリーのDB(www.example.jp)をコチラ(example.com/db/)に表示させるやり取りは下記です。 ・detail.php ・index.php ・inquiry.php また記述は共に同様で下記となります。 <?php $param = '発行されたパラメータ'; $charset = 'shift-jis'; $gflg=false; $to_file = '自身のファイル名'; include ("connect.inc"); ?> サーバー環境の話で、お門違いかもしれませんが、助けていただければと思い書き込みます。

    • ベストアンサー
    • PHP
  • PHPのエラーについて質問です

    PHPのエラーについて質問です XAMPPをインストールして、 http://localhost/top.php のように、フォルダの中身のファイル名を指定すると、 以前までは、ちゃんと表示されていたものが、 Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_END_HEREDOC or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in C:\xampp\htdocs\top.php on line 68 のようにエラーが表示されるようになりました。 解決策を教えてもらえないでしょうか?

    • ベストアンサー
    • PHP
  • PHPのdefineで「@」を使う方法

    PHPにてdefineで定数を「@」を含む文字列で宣言したいのですが、 define("HOGE", "hoge@hoge"); と言った設定をすると Parse error: syntax error, unexpected '@' のエラーが出てしまいます。 どのように記述すれば「@」を含む文字列を宣言する事が出来るのでしょうか?

    • ベストアンサー
    • PHP
  • 勉強の甲斐あっていよいよPHPファイルをサーバーに

    PHPを勉強しはじめて半年になる初心者です。 勉強の甲斐あっていよいよPHPファイルをサーバーにアップする段階までこぎつけたのですが、Mysqlのデーターベースを動作させるところで躓いています。 localhostでは正常に動いているのが確認済みです。 PHPファイルはアップし動作するのですがMysqlはエラーが出てしまいます。 (はじめてなのでなにがなにやら分からない状態でとりあえずやっていますが) エラー内容は以下の通りです。 Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ユーザー名'@'パスワード' (using password: YES) in /home/vhosts/ドメイン/httpdocs/php/dbcon.php on line 2 Access denied for user 'ユーザー名'@'パスワード' (using password: YES) phpフォルダ内の内容は( index.php , dbcon.php , list,php , sdata.sql ) となっています。 dbcon.phpは、 <?php mysql_connect('ドメイン','ユーザー名','パスワード') or die(mysql_error()); mysql_select_db('sdata'); mysql_query('SET NAME UTF8'); ?> list.phpでsdata.sqlのデーターを一覧表示させると言った認識を持っています。 ここで足りない事、間違っている事など気が付きましたらお教え願えませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでParse errorについて

    PHPでParse errorについて PHP設置した際に Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /当HPのアドレス/VoteBorn/VoteController.php on line 9 が表示されているのですが 9行目付近を見直しても間違えがわかりません。 <?php //VoteControllerから見たMatrixController.phpへの相対パス require_once "./MatrixController.php"; //Version 1.00 //Made by Nearliquid class VoteController extends MatrixController { private $col_list = array("id", "name", "Vote"); private $target_row = NULL;//ターゲットの行 private $target_vote = NULL;//ターゲットの投票数 private $now_row; public function makeFile($vote_file) { $this->makeMatrix($vote_file, $this->col_list); } //この関数を使わないと、これより下の関数は使用できない。 public function readFile($fp) { $this->readMatrix($fp); } public function checkNameCrash($name) { if($this->getTargetRow("name", $name) === FALSE) {//登録予定の名前は現在投票システム上には存在しない return(TRUE); } else {//二重登録 return(FALSE); } } 以下略・・・・ 申し訳ないのですが 是非ご教示の程よろしくお願いします

    • ベストアンサー
    • PHP
  • PHPでエラーがでてしまって困っています。

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/MAMP/htdocs/5-2-1.php on line 30 このエラーを解消できません。 下記は実践マスターPHP+MYSQLという書籍のなかのサンプルなんですが、どこが間違っているかどなたか教えていただけないでしょうか? エラーを検索するとダブルクォーテーションの使い方が原因と書いてあるんですが、最近PHPを勉強したばかりでどうやっても解決できません。 function check_3(&$str){ $str =str_replace($GLOBALS["from"],$GLOBALS["to"],$str);  ←この行でエラー global $msg; $msg = $GLOBALS["from"].'から'.$GLOBALS["to"].'へ置換しました!<br>'; return strlen($str); } 宜しくお願いします。

    • 締切済み
    • PHP
  • PHP5でクラス定数が使えますが

    PHP5でクラス定数が使えますが 以下のようにFで A + Eや A | Eなどとすると、 Parse errorとなります。 クラス定数は数値、文字列、配列のみで、組み合わせは不可という仕様で良いのでしょうか? PHP5の仕様書というものはネット上で存在しているのでしょうか? 英語でも構いませんので、ご存知の方教えてください。 class Test { const A=1; const B="2"; const C=array(3); const E=4; const F=A+E; // ここでエラー } この場合の対策ですが、素直にPHP4のように defineを使えば良いでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう