[제나플러스] shift_jis 홈페이지 사용시 에러대처방법 > 팁앤테크

본문 바로가기
사이트 내 전체검색

팁앤테크

[제나플러스] shift_jis 홈페이지 사용시 에러대처방법

페이지 정보

본문

php.iniで以下の設定があるとき

magic_quotes_gpc = On



クライアントより<form>フォームで送られた文字列データが全てエスケープされ、「" → ¥"」「¥ → ¥¥」など変換処理が行われます。
またクッキーも同様です。

ここで問題になってくるのが、Shift-JISを扱うときです。5C文字化けに遭遇します。
『ソ』、『噂』、『圭介』、『能』という字も、エスケープされます。

エスケープしないようにするためには、Magic quotesの設定をOffにするのが単純な方法ですが、設定変更できない場合などあります。

またこれが設定されているかされていないかで、いちいち意識するのも面倒であったりします。

たとえば開発環境のサーバーではできてたのに、本番環境のサーバーではできなかったり。
そんなときに限って本番環境では.htaccessが使えなかったり。

煩わしさをなくしてくれるのが、次のコードです。
これをデフォルトで使うライブラリファイルや設定ファイルに入れておけば、magic_quotes_gpcを意識する必要はありません。
(設定ファイルに入れるのは、コーディングルール的にお勧めしません。)

// magic_quotes_gpc = On の場合の対策
if (get_magic_quotes_gpc()) {
  function strip_magic_quotes_slashes($arr)
  {
    return is_array($arr) ?
      array_map('strip_magic_quotes_slashes', $arr) :
      stripslashes($arr);
  }

  $_GET     = strip_magic_quotes_slashes($_GET);
  $_POST    = strip_magic_quotes_slashes($_POST);
  $_REQUEST = strip_magic_quotes_slashes($_REQUEST);
  $_COOKIE  = strip_magic_quotes_slashes($_COOKIE);
}



magic_quotes_gpcのgpcは、GET、POST、COOKIEの意味ですので、エスケープの対象となるのはグローバル変数の$_GET、$_POST、$_REQUEST、$_COOKIEです。(PHP5)
(PHP4では、SERVER/ENVもエスケープされるようです。)
もしmagic_quotes_gpcがOnだったら、これらを逆変換stripslashesしてしまう。
Offの時にはなにもしない、というコードです。

一応、.htaccessで、magic_quotes_gpcをOffにする方法は、次のように書いた,htaccessをPHPの入っているディレクトリに設置するだけです。

<Files .htaccess>
order allow,deny
deny from all
</Files>

php_value "magic_quotes_gpc" "Off"



上のコードで、strip_magic_quotes_slashes関連のエラーが出るって人は、次のコードに置き換えてみてください。

// magic_quotes_gpc = On の場合の対策
if(!function_exists('strip_magic_quotes_slashes')) {
  if (get_magic_quotes_gpc()) {
    function strip_magic_quotes_slashes($arr)
    {
      return is_array($arr) ?
        array_map('strip_magic_quotes_slashes', $arr) :
        stripslashes($arr);
    }

    $_GET     = strip_magic_quotes_slashes($_GET);
    $_POST    = strip_magic_quotes_slashes($_POST);
    $_REQUEST = strip_magic_quotes_slashes($_REQUEST);
    $_COOKIE  = strip_magic_quotes_slashes($_COOKIE);
  }
}



このコードを使ってて問題になるのが、他の人の書いたプログラムを使うときです。
いつも、自分のプログラムではこのコードをデフォルトで入れてるから、magic_quotes_gpc = Onで起こるこれらのトラブルを忘れちゃってたときですね。
『なんで普段はできるのに、別の人が書いたプログラムでは¥マークが入っちゃうの?』
って思ったりします。

COOKIEもエスケープされるかの確認コード
magic_quotes_gpc = On にして試してみてください。

<?
$cookie=isset($_COOKIE["test"])?$_COOKIE["test"]:"¥¥";
setcookie("test",$cookie);
echo $cookie;
?>
추천0

댓글목록

등록된 댓글이 없습니다.

Total 825건 29 페이지
  • RSS
팁앤테크 목록
번호 제목 글쓴이 조회 추천 날짜
열람중 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25489 0 09-03
124 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25543 0 05-06
123 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25545 1 05-11
122 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25573 0 05-30
121 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25624 0 12-02
120 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25721 0 12-16
119 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25801 0 05-31
118 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25806 0 03-25
117 월드컵쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 25945 0 12-03
116 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26043 0 05-27
115 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26233 0 04-24
114 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26400 0 01-26
113 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26432 0 08-07
112 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26591 0 02-08
111 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26595 0 02-14
110 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26640 0 12-02
109 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26672 0 01-24
108 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26673 0 03-25
107 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26715 0 03-19
106 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26871 0 10-28
105 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 26899 0 09-12
104 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 27004 0 09-18
103 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 27032 0 07-12
102 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 27083 0 03-14
101 제로쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 27155 0 09-03

검색

회원로그인

회원가입

사이트 정보

株式会社YHPLUS / 대표 : ZERO
〒140-0011 東京都品川区東大井2-5-9-203
050-5539-7787
오픈카카오톡 (YHPLUS) :
https://open.kakao.com/o/slfDj15d

접속자집계

오늘
4,114
어제
5,045
최대
9,679
전체
2,618,492
Copyright (c) 株式会社YHPLUS. All rights reserved.