| 投稿者 | 
    メッセージ | 
  
  
    | 
		 | 
	
  
    | <  PHPプログラミング  ~  かわいそうな外国人を手伝ってください :) | 
  
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 9:13 am 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
はじめまして、
 
 
今大変な問題があって、日本人からの手伝いがとても必要です。
 
 
何年間SHIFT−JISのエンコードで日本語のHPを作りましたが、昨日、気がついたこと無い問題を発見しました: SHIFT-JISではPHPのstripslashes() と str_replace() を使うと時々文字化けになります。つまり、「0x5c」をしている文字はバックスラシュと間違えています。
 
 
stripslashes()をよく使っていますので、違うエンコードにして見ました。でもそうすると、IEで見たら全てのページは空になってしまいます。原因は何でしょうか?どうしたら良いですか?一番簡単な方法は何ですか?
 
 
しかも、今作っているサイトは結構大きいので、沢山なincludesと普通のファイルがあります。もし、全てのファイルを別のエンコードにコンバートしたかったら、どうしたらいいですか?
 
 
お願いします! |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 9:43 am 
            
             | 
            
              | 
         
        | 
  
  
    
       
       
       
      登録日: 2006年3月 23日 
      投稿記事: 48 
      
  | 
  | 
 | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 9:57 am 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
| 「content="text/html; charset=EUC-JP"」にしましたが、IEでは空のページになったし、Firefoxでは文字化けばっかりになりました。全てのファイルをUTF-8にコンバートする必要ありませんか? |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 11:21 am 
            
             | 
            
              | 
         
        | 
  
  
    
       
       
       
      登録日: 2006年4月 05日 
      投稿記事: 14 
      
  | 
  | 
ファイルの文字コードと<meta>で指定する文字コードが異なれば、文字化けします。
 
 
<meta content-type="text/html; charset=EUC-JP">
 
とするなら、ファイルの文字コードもEUC-JPにコンバートしましょう。
 
 
ファイルの文字コードを変換するフリーソフトも多数あります。
 
私は「KanjiTranslator」を使ってます。
 
 
↓VECTORより
 
http://www.vector.co.jp/soft/win95/util/se326595.html
 
 
大量のファイルを一気に変換できるので気に入ってますが、たまに変換されないファイルがあるのが、やや難点です。
 
 
ためしに使ってみてください。 |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 11:44 am 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
ありがとう、ちびさん!
 
 
ソフトを使ってみます。
 
でもその前にはも1個の質問があります:
 
 
私のサイトのPHPソースと日本語の内容はちゃんと別れていますので、全てのファイルそれとも日本語のファイルだけをコンバートしなければならないかどうか知りたいのです。
 
 
そして、SHIFT-JISで保存されたMYSQLデータをどうしますか?
 
 
サンク・ユー / メルシ :) |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 12:23 pm 
            
             | 
            
              | 
         
        | 
  
  
    
       
       
       
      登録日: 2006年4月 05日 
      投稿記事: 14 
      
  | 
  | 
PHPファイルは全てコンバートしましょう。
 
 
MySQLについては、EUC-JPで再構成するか、マルチバイト対応を前提としてPHP側でmb_convert_encoding()を適用して出力するか、どちらかでしょう。
 
 
どちらも、地道な力仕事ですが。 |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            金 4月 21, 2006 7:36 pm 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
ありがとうちびさん!
 
 
今日よく考えたんですけど、別のエンコードにするのはとても面倒くさいと思いました。
 
そして、今のプロジェクトではPHPのmb_____()をインストールできません。
 
 
しかも、昨日日本の有名な会社のサイト(NTT、SONYなど)を好奇心で見た時に、皆は私のようにSHIFT-JISを使っていると明らかになりました。
 
 
だから、今考えているのは:違うエンコードにする変わりに、stripslashes()の問題だけを直したほうがいいんじゃないですか?・・・と思いました。確かに、どこかにはaddslashes()の使い方が悪いと思います。今までデータベースの為にget_magic_quotes_gpcはONでした。OFFにすることを考えています。
 
でもOFFにしたら、MYSQLデータを保存する時に「”」などの文字を守らないと行けないでしょう。今ちょっと混乱になってしまいました:( |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            水 8月 02, 2006 12:10 am 
            
             | 
            
              | 
         
        | 
  
  
    
       
       
       
      登録日: 2006年8月 01日 
      投稿記事: 4 
      所在地: Shimonoseki
  | 
  | 
magic_quotes を OFF にして、MySQLにデータを入れるときに
 
mysql_real_escape_string() を使えば? |  
 _________________ Kanmonline.com |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            木 8月 10, 2006 4:12 pm 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
こんにちわ!
 
 
ブラウザーが間違った文字コードで認識しているとかはないですか?
 
 
header();を使って確実にブラウザーにSHIFT_JISですよと伝えてみたら?
 
 
header('Content-type: text/html;charset=SHIFT_JIS');
 
 
一回試してみてください。 |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     | 
    
        
           時間:
            木 8月 10, 2006 4:24 pm 
            
             | 
            
              | 
         
        | 
  
  
    | 
 | 
別にmagic_quotesをOFFにしなくても、PHPの処理で判断したらいいと思います。
 
 
データベースに書き込む時だけmysql_escape_string()等を使ったらいいと思います。
 
 
if ($_SERVER["REQUST_METHOD"] == "POST") {
 
 
// get_magic_quotes_gpcの確認
 
$quotes = get_magic_quotes_gpc();
 
 
 
 if ($quotes) {
 
 	$userName = stripslashes($_POST["userName"]);
 
 } else {
 
 	$userName = $_POST["userName"];
 
 }
 
 
 
 //処理省略
 
 
 
 //データベースの書き込み
 
 $userName = mysql_escape_string($userName);
 
 
 
 $sql = "INSERT INTO table (username) VALUES('".$userName."')";
 
 mysql_query($sql);
 
 
} |  
 |  
 
 |  
  | 
  
  
     | 
     | 
  
  
      | 
  
  
     |