PHP之mb_check_encoding使用
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使用的更多相关文章
- PHP7函数大全(4553个函数)
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...
- php中文字符串翻转
转自:http://www.oschina.net/code/snippet_613962_17070 <?php header("content-type:text/html;cha ...
- PHP用substr截取字符串出现中文乱码问题用mb_substr
PHP用substr截取字符串出现中文乱码问题用mb_substr实例:mb_substr('截取中文乱码问题测试',0,5, 'utf-8'); 语法 : string substr (string ...
- PHP5 GD库生成图形验证码(汉字)
PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...
- php中文字符串反转
<?php header("content-type:text/html;charset=utf-8"); /** 此函数的作用是反转中文字符串 mb_strlen() 获取 ...
- PHP5生成图形验证码(有汉字)
利用PHP5中GD库生成图形验证码 类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor 新建一个真彩色图像 imagecolora ...
- php 中文转拼音首字母问题
<?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chi ...
- PHP编码相关函数试题
1.检查字符串在指定的编码里是否有效的函数是什么? 2.获取字符编码的函数是什么? 3.解析 GET/POST/COOKIE 数据并设置全局变量的函数是什么? 4.大小写不敏感地查找字符串在另一个字符 ...
- PHP截取带有汉字的字符串,将汉字按两个字节计算
<?php header("Content-type:text/html;charset=utf-8"); /** *截取字符串,汉字占两个字节,字母占一个字节 *页面编码必 ...
随机推荐
- Oracle Submit Request - 请求的调用方法: FND_REQUEST.SUBMIT_REQUEST
废话: 有一段时间没搞过开发了,做项目又要重新找回点开发的记忆.重新拾回一点点零碎. 跑多了产线,配置的一些参数也忘记得差不多了,长时间没动就是易遗忘,找点资料做个笔记就是时间保镖. 正题: FN ...
- 浏览器缓存和Service Worker
浏览器缓存和Service Worker @billshooting 2018-05-06 字数 6175 Follow me on Github 标签: BOM 1. 传统的HTTP浏览器缓存策略 ...
- Markdown编辑器——常用语法
Markdown是什么? 简短来说,他就是一款特别适用于写博客的编辑器.为什么适合呢,因为它特别的方便.以博客园的编辑界面来说,它原本的界面是这样的(有没有一种Word2003的既视感): 但是,当你 ...
- [Elixir005] 查看指定数据的详细信息 i helper
elixir在1.2后增加了一个新的特性i helper. 在iex shell中使用i可以查看任意数据的数据类型和详细描述 #查看变量描述 iex(1)> i {:test, "Th ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- leecode刷题(18)-- 报数
leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...
- AssertionError: View function mapping is overwriting an existing endpoint function: admin.main
刚才给views.py文件添加了一个路由地址: @admin_view.route('/test', methods=["get", "post"]) @log ...
- (四)SSO之CAS框架单点登录,自定义验证登录方式
应需求的变化,在登录cas的时候,默认根据用户名和密码进行验证,如果加上用户名,密码和一个系统标识进行验证呢?该如何做呢? 我们知道cas默认的登录界面中,输入的用户名和密码,再配置一下deploye ...
- eclipse的classpath(build path)和classpaht几种设置的方式
1,默认eclipse有自己的classpath的路径并不是环境变量中配置的classpah. 2,eclipse的classpath每个项目不同,一般是在工作区的当前项目的class下. 2.1,可 ...
- spring-boot-maven-plugin多模块install问题解决办法
一.问题描述: 项目分多个模块,open-eureka注册中心.open-provider服务提供者.open-common公共部分,provider依赖common.父pom使用spring-boo ...