PHP 도 큰일 을 할 수 있 습 니 다.PHP 의 인 코딩 디 코딩 상세 설명

11287 단어 PHP부호화디 코딩
앞 에 쓰다
PHP 도 큰 일 을 할 수 있 습 니 다.제 가 정리 한 PHP 문법 특성 과 관련 함수 라 이브 러 리 의 전형 적 인 용법 입 니 다.반드시 4,2 조 1000 근 의 효 과 를 실현 할 수 있 는 것 은 아 닙 니 다.그러나 이런 방법 을 파악 하면 당신 의 업무 와 학습 에 도움 이 될 수 있 습 니 다.여러분 들 이 지혜 를 모 아 을 수 있 기 를 바 랍 니 다.을 더욱 멋 지게 풍부 화 시 킬 수 있 기 를 바 랍 니 다!전재 출처 밝 혀 주세요(jb51.net)
머리말
PHP 는 흔히 볼 수 있 는 스 크 립 트 언어 로 간단 하고 배우 기 쉬 우 며 손 이 빠 르 기 때문에 거의 50%이상 의 웹 프로그램 이 PHP 의 모습(불완전 통계)을 가지 고 있 기 때문이다.PHP 는 이 를 개발 하기 위해 풍부 한 함수 와 API 인 터 페 이 스 를 제공 하여 우 리 는 강력 한 내장 함수 와 확장 을 편리 하 게 사용 할 수 있 습 니 다.본 고 는 시리즈 의 첫 번 째 편 으로 주로 PHP 가 디 코딩,진법 전환 에 관 한 지식 을 정리 합 니 다.

3.PHP 디 코딩
1.ASCII 디 코딩
ASCII(영어 발음:/ˈæ ski/ASS-kee,American Standard Code for Information Interchange,미국 정보 교환 표준 코드)는 라틴 자 모 를 기반 으로 한 컴퓨터 인 코딩 시스템 이다.이 는 주로 현대 영 어 를 표시 하 는 데 사용 되 며,확장 버 전 EASCII 는 다른 서유럽 언어 를 부분적으로 지원 할 수 있 으 며,국제 표준 ISO/IEC 646 과 같다.유 니 버 설 네트워크 로 인해 ASCII 는 널리 통용 되 었 고 2007 년 12 월 까지 유 니 코드 로 대체 되 었 다https://zh.wikipedia.org/zh/ASCII

PHP 기본 함수 에 ASCII 의 디 코딩 함수 가 내장 되 어 있어 서 ASCII 디 코딩 을 쉽게 할 수 있 습 니 다.
int ord(string$string)/문자열 string 의 첫 번 째 문자 의 ASCII 코드 값 을 되 돌려 줍 니 다.
string chr ( int $ascii  ) //ascii 가 지정 한 단일 문 자 를 되 돌려 줍 니 다.

<?php
$str = 'Welcome to China';
function getNum($string){
    $needle = 0;
    $num = '';
    while (isset($string[$needle])) {
        $num .= $num==0?'':' ';
        $num .= ord($string[$needle]);
        $needle++;
    }
    return $num;
}
function getChar($num){
    $num_arr = explode(' ', $num);
    $string = '';
    foreach ($num_arr as $value) {
        $string .= chr($value);
    }
    return $string;
}
echo " ASCII
";
echo getNum($str);
echo "
";
echo "ASCII
";
echo getChar(getNum($str));
/* @OUTPUT
ASCII
87 101 108 99 111 109 101 32 116 111 32 67 104 105 110 97
ASCII
Welcome to China
*/
 
?>
2.URL 디 코딩
URL 인 코딩 은 폼 을 압축 해서 입력 하 는 브 라 우 저 형식 입 니 다.브 라 우 저 는 폼 에서 모든 name 과 그 값 을 가 져 와 name/value 매개 변수 인 코딩 을 URL 의 일부분 으로 하거나 서버 에 분리 해서 보 냅 니 다.예 를 들 어 우리 가 웹 페이지 를 방문 할 때%가 있 는 문자열 이 많이 나타 날 것 이다.이것 이 바로 URL 인 코딩 이다.
URL 인 코딩 은 일반적으로 UTF-8 인 코딩 형식 을 사용 하기 때문에 UTF-8 형식 으로 데 이 터 를 전달 하 는 것 을 권장 합 니 다.정상 적 인 의미 의 URL 인 코딩 은 ASCII 코드 의 16 진수 앞 에%를 더 하고 대소 문자 구분 이 없 는 것 으로 이해 할 수 있 습 니 다.

string urlencode(string $str)  // URL , 。 + 。
string urldecode(string $str)  // %XX, ('+') 。
string rawurlencode (string $str)   // RFC 3986 , %20。
string rawurldecode (string $str)   // , (%) 。 + 。
두 그룹의 함수 용법 과 마찬가지 로+와 빈 칸 의 변환 처리 에 있어 서:rawurlencode 는 빈 칸 을%20 으로 바 꾸 고+를 빈 칸 으로 바 꾸 지 않 습 니 다.urlencode 는 다 릅 니 다.

<?php
$str_arr = array(
    'www.jb51.net',
    'https://www.jb51.net/',
    'PHP ',
    '!@#$%^&*()_+=-~`[]{}|\\;:\'"<>,./?'
    );
foreach ($str_arr as $key => $value) {
    echo $value,"\t->\t",urlencode($value),"
";
}
/* @OUTPUT
www.jb51.net  ->    www.jb51.net
https://www.jb51.net/  ->    http%3A%2F%2Fwww.jb51.net%2F
PHP   ->    PHP%E4%B9%9F%E8%83%BD%E5%B9%B2%E5%A4%A7%E4%BA%8B
!@#$%^&*()_+=-~`[]{}|\;:'"<>,./?      ->    %21%40%23%24%25%5E%26%2A%28%29_%2B%3D-%7E%60%5B%5D%7B%7D%7C%5C%3B%3A%27%22%3C%3E%2C.%2F%3F
*/
?>
3.Base 64 디 코딩
Base 64 는 64 개의 인쇄 가능 한 문 자 를 바탕 으로 바 이 너 리 데 이 터 를 표시 하 는 표현 방법 이다.2 의 6 제곱 은 64 이기 때문에 6 개의 비트 는 하나의 단원 으로 인쇄 가능 한 문자 에 대응 합 니 다.세 개의 바이트 에는 24 개의 비트 가 있 는데 4 개의 Base 64 단원,즉 3 개의 바이트 에는 4 개의 인쇄 가능 한 문자 로 표시 해 야 한다.그것 은 전자우편 의 전송 코드 로 사용 할 수 있다.사용 하 는 문 자 는 대소 문자 각각 26 개 를 포함 하고 10 개의 숫자 와'+',슬 래 쉬'/'를 추가 하여 모두 64 개의 문자,등호'='을 접미사 로 사용 합 니 다.완전한 base 64 정 의 는 RFC 1421 과 RFC 2045 를 볼 수 있다.인 코딩 된 데 이 터 는 원본 데이터 보다 약간 길 고 원래 의 4/3 입 니 다.이메일 에는 RFC 822 규정 에 따라 76 글자 마다 리 턴 을 추가 해 줄 을 바 꿔 야 한다.인 코딩 후 데이터 길 이 는 대략 원래 길이 의 135.1%로 추산 할 수 있다https://zh.wikipedia.org/zh/Base64
string base64_encode(string $data)  //base 64 를 사용 하여 data 를 인 코딩 합 니 다.
string base64_decode (string $data [, bool $strict = false ])  //base 64 인 코딩 된 data 를 디 코딩 합 니 다.
사례:HTML 페이지 의 img 탭 은 src 속성 에서 base 64 인 코딩 방식 으로 그림 을 출력 할 수 있 습 니 다.그러면 HTTP 요청 횟수 를 줄 일 수 있 습 니 다.

<?php
$string = file_get_content('3mc2.png');
echo '<img src="data:image/png;base64,',base64_encode($string),'">';
/* @OUTPUT
UEhQ5Lmf6IO95Yqe5aSn5LqL
*/
?>
4.HTML 실체 디 코딩
일부 문 자 는 HTML 에서 미리 남 겨 진 것 으로 특수 한 의 미 를 가진다.예 를 들 어'<'보다 작 으 면 HTML 탭 의 시작 을 정의 하 는 데 사용 된다.브 라 우 저가 이 문자 들 을 정확하게 표시 하 기 를 원한 다 면,HTML 원본 코드 에 문자 실 체 를 삽입 해 야 합 니 다.문자 실 체 는 세 부분 이 있 습 니 다.하나 와 번호'&'와 하나의 실체 이름(또는'\#'과 하나의 실체 번호),그리고 하나의 분점';'이 있 습 니 다http://www.ascii.cl/htmlcodes.htm
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = “UTF-8″ [, bool $double_encode = true ]]] )  //다음 HTML 특수 문 자 를 포함 하 는 HTML 실체 인 코딩
1.'&' (ampersand) becomes ‘&'
2.'”‘ (double quote) becomes ‘"' when ENT_NOQUOTES is not set.
3.”‘” (single quote) becomes ‘'' (or ') only when ENT_QUOTES is set.
4.'<‘ (less than) becomes ‘<'
5.'>' (greater than) becomes ‘>'
string htmlspecialchars_decode (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ])  //이 함수 의 역할 은 htmlspecialchars()와 정반 대 입 니 다.그것 은 특수 한 HTML 실 체 를 일반 문자 로 변환 합 니 다.
그리고 기능 이 같은 함수 html entities/htmlentity_decode,이 함 수 는 한자 까지 HTML 실체 인 코딩 을 했 고 난 장 판이 발생 할 수 있 으 므 로 html specialchars 를 사용 하여 인 코딩 을 권장 합 니 다.
사례:XSS 크로스 스 크 립 트 공격 을 방지 하려 면 사용자 가 제출 한 데 이 터 를 HTML 실체 로 변환 해 야 합 니 다.

<?php
$_POST['message'] = ' \'"><sCript src=https://www.jb51.net/hook.js>';
if (empty($_POST['message'])) {
    exit('Message is NULL');
}
$message = htmlspecialchars(trim($_POST['message']));
echo $message;
/* @OUTPUT
'&quot;&gt;&lt;sCript src=https://www.jb51.net/hook.js&gt;
*/
?>
5.2 진,8 진,10 진,16 진 상호 전환
진법 간 의 전환 은 여기 서 말 할 것 이 없다.한 마디 로 하면 차이 가 많 지 않다.몇 진법 이 있 으 면 몇 진법 이 있 는 지 기억 하기 만 하면 한 사람 이 들 어 가 는 것 이다.예 를 들 어 10 진법 이 9 의 다음 이 10 이 고 2 진법,8 진법,16 진법 은 이런 식 으로 유추 된다.
string bin2hex(string$str)//ASCII 문자열 을 되 돌려 줍 니 다.매개 변수 str 의 16 진수 입 니 다.바이트 방식 을 바 꾸 고 네 자리 바이트 가 우선 합 니 다.
string hex2bin(string$data)/16 진수 문자열 을 바 이 너 리 문자열 로 변환 합 니 다.
number bindec (string $binary_string)//binarystring 매개 변수 가 표시 하 는 바 이 너 리 수의 10 진법 등 가치.
string decbin(int$number)/주어진 number 인자 가 있 는 바 이 너 리 표 시 를 포함 하 는 문자열 을 되 돌려 줍 니 다.변환 할 수 있 는 최대 수 치 는 10 진법 의 4294967295 이 고 그 결 과 는 32 개의 1 문자열 입 니 다.
number octdec (string $octal_string)//octal 로 돌아 가기string 매개 변수 가 표시 하 는 8 진수 의 10 진수 등 값.
string decoct(int$number)/주어진 number 인자 가 있 는 8 진 표 시 를 포함 하 는 문자열 을 되 돌려 줍 니 다.전환 할 수 있 는 최대 수 치 는 10 진법 의 4294967295 로 그 결 과 는'377777777'이다.
string base_convert(string$number,int$from base,int$tobase)//임의의 진 변환,number 를 포함 한 문자열 을 되 돌려 줍 니 다.number 자체 의 진 도 는 from base 에서 지정 합 니 다.from base 와 tobase 는 모두 2 와 36 사이(2 와 36 포함)에 만 있 을 수 있다.10 진법 보다 높 은 숫자 는 알파벳 a-z 로 표시 하 는데 예 를 들 어 a 는 10 을 나타 내 고 b 는 11 과 z 는 35 를 나타 낸다.
6.GBK,UTF-8 문자 인 코딩 변환
코드 를 쓰 는 과정 에서 인 코딩 문제 로 인 한 어 지 러 운 코드 가 자주 발생 한다.사실 인 코딩 문 제 를 해결 하 는 것 은 매우 간단 하 다.하나의 인 코딩 만 사용 하면 된다.일반적으로 만국 코드 인 UTF-8 을 사용 하 는 것 이 가장 좋 은 선택 이다.
여기 서 말 하 는 인 코딩 은 문자 인 코딩 과 파일 저장 의 인 코딩 입 니 다.물론 시스템 인 코딩 의 차이 점 을 언급 할 수 밖 에 없습니다.
계통             부호화     문자 끝
Windows    GBK     \r
*nix             UTF-8  
따라서 특수 문 자 를 처리 할 때 특히 주의해 야 한다.
흔히 볼 수 있 는 인 코딩 은 GBK,UTF-8 등 이 있 고 함수 사용 에 있어 서 보통 두 가지 가 있 습 니 다.
string mb_convert_encoding (string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ])  //string 형식 str 의 문자 인 코딩 을 선택 할 수 있 는 fromencoding to 로 변환encoding。
string iconv (string $in_charset , string $out_charset , string $str)  //문자열 str 를 in 에서charset 인 코딩 out 로 변환charset。
사례:윈도 시스템 은 WAMP 서버 를 설치 하여 다음 스 크 립 트 를 UTF-8 인 코딩 된 php 파일 로 저장 하면 브 라 우 저 를 통 해 인 코딩 되 지 않 은 php 디 렉 터 리 의 파일 을 볼 수 있 습 니 다.mbconvert_encoding 코드 를 바 꾸 면 출력 오류 가 발생 합 니 다(Windows 는 서버 로 서).

<?php
    function getDir($dir){
        static $string = '';
        if(is_file($dir)){
            $string.= $dir;
        }else{
            $oDir = @opendir($dir);
            while($fileName = readdir($oDir)){
                if($fileName!='.' && $fileName!='..'){
                    if(is_file($dir.'/'.$fileName)){
                        $string.=$fileName."
";
                    }elseif(is_dir($dir.'/'.$fileName)){
                        $string.= $dir.'/'.$fileName.'/'."
";
                        getDir($dir.'/'.$fileName);
                    }
                }
            }
        }
        return $string;
    }
    echo mb_convert_encoding( getDir('php'),'utf8', 'gbk' );
 
?>
총화
인 코딩 은 데이터 처리 의 기초 이기 때문에 PHP 의 프로 그래 밍 개발 과정 에서 상당히 중요 하 다.PHP 의 처리 방법 에 대해 서 는 프로 그래 밍 에 사용 할 때 수량 파악 이 필요 합 니 다.특히 비슷 한 함수 들 은 어떻게 구분 해 야 합 니까?전재 출처 밝 혀 주세요(jb51.net)

좋은 웹페이지 즐겨찾기