mb_check_encoding

  • (PHP 4 >= 4.4.3, PHP 5 >= 5.1.3, PHP 7)
  • mb_check_encoding — Check if the string is valid for the specified encoding
  • mb_check_encoding — 检查字符串在指定的编码里是否有效

Description

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)”。

Parameters

var

  • The byte stream to check. If it is omitted, this function checks all the input from the beginning of the request.
  • 要检查的字节流。如果省略了这个参数,此函数会检查所有来自最初请求所有的输入。

encoding

  • The expected encoding.
  • 期望的编码。

Return Values

  • Returns TRUE on success or FALSE on failure.
  • 成功时返回 TRUE, 或者在失败时返回 FALSE。

Examples

<?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, 'utf-8' ) ) . PHP_EOL; //输出1
echo ( mb_check_encoding( $utf8Str, 'gbk' ) ) . PHP_EOL; //输出1
echo bin2hex( $utf8Str ) . PHP_EOL;
//492068617665203420626f6f6b7320616e642032206d6167617a696e657320746f20636865636b206f75742e20
$gbkStr = mb_convert_encoding( $utf8Str, 'gbk', 'utf-8' );
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;
}

文章参考

转载注明出处

PHP之mb_check_encoding使用的更多相关文章

  1. PHP7函数大全(4553个函数)

    转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...

  2. php中文字符串翻转

    转自:http://www.oschina.net/code/snippet_613962_17070 <?php header("content-type:text/html;cha ...

  3. PHP用substr截取字符串出现中文乱码问题用mb_substr

    PHP用substr截取字符串出现中文乱码问题用mb_substr实例:mb_substr('截取中文乱码问题测试',0,5, 'utf-8'); 语法 : string substr (string ...

  4. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  5. php中文字符串反转

    <?php header("content-type:text/html;charset=utf-8"); /** 此函数的作用是反转中文字符串 mb_strlen() 获取 ...

  6. PHP5生成图形验证码(有汉字)

    利用PHP5中GD库生成图形验证码 类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor   新建一个真彩色图像      imagecolora ...

  7. php 中文转拼音首字母问题

    <?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chi ...

  8. PHP编码相关函数试题

    1.检查字符串在指定的编码里是否有效的函数是什么? 2.获取字符编码的函数是什么? 3.解析 GET/POST/COOKIE 数据并设置全局变量的函数是什么? 4.大小写不敏感地查找字符串在另一个字符 ...

  9. PHP截取带有汉字的字符串,将汉字按两个字节计算

    <?php header("Content-type:text/html;charset=utf-8"); /** *截取字符串,汉字占两个字节,字母占一个字节 *页面编码必 ...

随机推荐

  1. 初级 Web 开发人员的 Tomcat

    介绍使用 Tomcat 对 JavaServer Pages (JSP).servlet 和 Web 服务进行编程,Tomcat 是来自 Apache Foundation 的开源应用服务器.本教程引 ...

  2. Tweak和app交互方案【进程通信】

    Core Foundation DEMO:Tweak端: CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCent ...

  3. C#基础入门 五

    C#基础入门 五 递归 递归调用:一个方法直接或间接地调用了它本身,就称为方法的递归调用. 递归方法:在方法体内调用该方法本身. 递归示例 public long Fib(int n) { if(n= ...

  4. cocos2dx常见场景切换动画(转)

    本文转载自:http://www.cnblogs.com/linux-ios/archive/2013/04/09/3010779.html bool HelloWorld::init() { /// ...

  5. 使用centos官方镜像制作jdk8环境镜像

    首先将jdk文件或者tar包放在/var/local路径下 然后Dockerfile中写 # 以 centos7 为基础镜像 FROM centos:latest MAINTAINER chen # ...

  6. java获取网络ip地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  7. django drf JWT

    建议使用djangorestframework-jwt或者djangorestframework_simplejwt,文档为 https://github.com/GetBlimp/django-re ...

  8. Promise之你看得懂的Promise

    本文由作者陈旭锋(任职网易考拉)授权网易云社区发布. Promise源码详解 学习知识要善于思考,思考,再思考. -- 爱因斯坦 1.回调地狱 曾几何时,我们的代码是这样的,为了拿到回调的结果,不得不 ...

  9. Android - Telephony API 1.6

    SignalStrength: 1. public int getGsmSignalStrength() : GSM Signal Strength, valid values are (0-31, ...

  10. django系列3.4-- request对象和response对象(未完待续)

    一.request对象 详细信息可以查阅django官方文档 共有五种请求相关的常用值 request.path_info 返回用户访问的url不包括域名 request.method 请求中使用的H ...