Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie mit, wie Sie mb_check_encoding in PHP verwenden

Teilen Sie mit, wie Sie mb_check_encoding in PHP verwenden

小云云
小云云Original
2018-01-29 15:13:072848Durchsuche

In diesem Artikel erfahren Sie hauptsächlich, wie Sie mb_check_encoding verwenden. Ich hoffe, er kann Ihnen helfen.

mb_check_encoding

  • (PHP 4 >= 4.4.3, PHP 5 >= 5.1.3, PHP 7)

  • mb_check_encoding – Prüfen Sie, ob die Zeichenfolge für die angegebene Kodierung gültig ist

  • mb_check_encoding – Prüfen Sie, ob die Zeichenfolge für die angegebene Kodierung gültig ist

Beschreibung

bool mb_check_encoding ([ string $var = NULL [, string $encoding = mb_internal_encoding() ]] )
// Checks if the specified byte stream is valid for the specified encoding. 
// It is useful to prevent so-called "Invalid Encoding Attack".

// 检查指定的字节流在指定的编码里是否有效。它能有效避免所谓的“无效编码攻击(Invalid Encoding Attack)”。

Parameter

var

  • Der zu überprüfende Bytestrom, wenn er weggelassen wird , diese Funktion prüft alle Eingaben vom Beginn der Anfrage an.

  • Der zu prüfende Bytestrom. Wenn dieser Parameter weggelassen wird, prüft diese Funktion alle Eingaben aus der ursprünglichen Anfrage.

Kodierung

  • Die erwartete Kodierung.

  • Die erwartete Kodierung.

Rückgabewerte

  • Gibt TRUE bei Erfolg oder FALSE bei Misserfolg zurück.

  • Gibt bei Erfolg zurück TRUE oder FALSE bei Fehler.

Beispiele

<?php
/**
 * Created by PhpStorm.
 * User: zhangrongxiang
 * Date: 2018/1/27
 * Time: 下午2:59
 */

/**纯数字和英文字母组合*/
$utf8Str = "I have 4 books and 2 magazines to check out. ";
echo ( mb_check_encoding( $utf8Str, &#39;utf-8&#39; ) ) . PHP_EOL; //输出1
echo ( mb_check_encoding( $utf8Str, &#39;gbk&#39; ) ) . PHP_EOL; //输出1
echo bin2hex( $utf8Str ) . PHP_EOL;
//492068617665203420626f6f6b7320616e642032206d6167617a696e657320746f20636865636b206f75742e20
$gbkStr = mb_convert_encoding( $utf8Str, &#39;gbk&#39;, &#39;utf-8&#39; );
echo bin2hex( $gbkStr ) . PHP_EOL;
//492068617665203420626f6f6b7320616e642032206d6167617a696e657320746f20636865636b206f75742e20

/**gbk编码的字符串  --> 设置文件编码为gbk*/
$str = '博客园和github。';
echo mb_check_encoding( $str, 'utf-8' ) . PHP_EOL;  //输出空
echo mb_check_encoding( $str, 'gbk' ) . PHP_EOL; //输出1

/**utf-8编码的字符串  --> 设置文件编码为utf-8*/
$str = '博客园和github。';
echo mb_check_encoding( $str, 'utf-8' ) . PHP_EOL;  //1
echo mb_check_encoding( $str, 'gbk' ) . PHP_EOL; //输出空

$utf8Str = '我abc是谁.';
echo mb_check_encoding( $utf8Str, 'utf-8' ) . PHP_EOL;  //输出1
//如果有中文标点符号则为空!!!
echo mb_check_encoding( $utf8Str, 'gbk' ) . PHP_EOL; //输出1

/**自定义检测字符串编码是否为utf-8*/
function is_utf8( $str ) {
    return (bool) preg_match( '//u', serialize($str) );
}

echo 'hello 中国!' .is_utf8( 'hello 中国!' ) . PHP_EOL; //1

function check_utf8( $str ) {
    $len = strlen( $str );
    for ( $i = 0; $i < $len; $i ++ ) {
        $c = ord( $str[ $i ] );
        if ( $c > 128 ) {
            if ( ( $c > 247 ) ) {
                return false;
            } elseif ( $c > 239 ) {
                $bytes = 4;
            } elseif ( $c > 223 ) {
                $bytes = 3;
            } elseif ( $c > 191 ) {
                $bytes = 2;
            } else {
                return false;
            }
            if ( ( $i + $bytes ) > $len ) {
                return false;
            }
            while ( $bytes > 1 ) {
                $i ++;
                $b = ord( $str[ $i ] );
                if ( $b < 128 || $b > 191 ) {
                    return false;
                }
                $bytes --;
            }
        }
    }
    
    return true;
} // end of check_utf8

echo check_utf8("hello 中国").PHP_EOL; // 1
echo check_utf8( "\x00\xE3").PHP_EOL;  //空

/** check a strings encoded value */
function checkEncoding( $string, $string_encoding ) {
    $fs = $string_encoding == 'UTF-8' ? 'UTF-32' : $string_encoding;
    $ts = $string_encoding == 'UTF-32' ? 'UTF-8' : $string_encoding;
    
    return $string === mb_convert_encoding( mb_convert_encoding( $string, $fs, $ts ), $ts, $fs );
}

/* test 1 variables */
$string   = "\x00\x81";
$encoding = "Shift_JIS";

/* test 1 mb_check_encoding (test for bad byte stream) */
if ( true === mb_check_encoding( $string, $encoding ) ) {
    echo 'valid (' . $encoding . ') encoded byte stream!' . PHP_EOL;
} else {
    echo 'invalid (' . $encoding . ') encoded byte stream!' . PHP_EOL;
}

/* test 1 checkEncoding (test for bad byte sequence(s)) */
if ( true === checkEncoding( $string, $encoding ) ) {
    echo 'valid (' . $encoding . ') encoded byte sequence!' . PHP_EOL;
} else {
    echo 'invalid (' . $encoding . ') encoded byte sequence!' . PHP_EOL;
}

/* test 2 */
/* test 2 variables */
$string   = "\x00\xE3";
$encoding = "UTF-8";
/* test 2 mb_check_encoding (test for bad byte stream) */
if ( true === mb_check_encoding( $string, $encoding ) ) {
    echo 'valid (' . $encoding . ') encoded byte stream!' . PHP_EOL;
} else {
    echo 'invalid (' . $encoding . ') encoded byte stream!' . PHP_EOL;
}

/* test 2 checkEncoding (test for bad byte sequence(s)) */
if ( true === checkEncoding( $string, $encoding ) ) {
    echo 'valid (' . $encoding . ') encoded byte sequence!' . PHP_EOL;
} else {
    echo 'invalid (' . $encoding . ') encoded byte sequence!' . PHP_EOL;
}

Verwandte Empfehlungen:

php-Zeichenkodierungskonvertierungsproblem mb_convert_encoding und iconv-Funktion

Das obige ist der detaillierte Inhalt vonTeilen Sie mit, wie Sie mb_check_encoding in PHP verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn