php stream encoding,PHP之mb_check_encoding使用方法分享

本文主要和大家分享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 — 检查字符串在指定的编码里是否有效

Descriptionbool 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

varThe byte stream to check. If it is omitted, this function checks all the input from the beginning of the request.

要检查的字节流。如果省略了这个参数,此函数会检查所有来自最初请求所有的输入。

encodingThe expected encoding.

期望的编码。

Return ValuesReturns 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;

}

相关推荐:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接

描述USB转TTL的硬件设备:USB转TTL主机一台;芯片选用PL-2303HXUSB转TTL刷机线&#xff0c;采用进口PL2303HX芯片。连接上电脑并安装驱动后&#xff0c;电脑即扩展出一个COM3或COM4....等的串口&#xff0c;配合相应软件就能对路由器、机顶盒或接收机等各种TTL接口的设备系统进行…

php乱码调试,NotePad++ 调试PHP代码中文显示乱码

最近在NotePad上调试PHP代码&#xff0c;按照示例代码进行调试&#xff0c;结果在显示中文的时候显示一堆乱码&#xff0c;于是上网百度&#xff0c;有2种方法可以解决&#xff1a;按调试方式有2种方法&#xff1a;1、菜单插件-NppExec:“插件”-“NppExec”-"Console Out…

php怎么设置网站的字符编码,php如何设置字符编码

php如何设置字符编码&#xff1f;a. 如果欲使用gb2312编码&#xff0c;那么php要输出头&#xff1a;header(“Content-Type: text/html; charsetgb2312")&#xff0c;静态页面添加&#xff0c;所有文件的编码格式为ANSI&#xff0c;可用记事本打开&#xff0c;另存为选择编…

oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象

因为需求需要重建EM,重建时因为某些错误被迫停止,比如对象已存在、用户已经存在等,最终找出了创建必备的条件&#xff1b;1.环境变量(Oracle和Grid在同一个用户下安装):ORACLE_HOME 要设为DB路径;ORACLE_UNQNAME 要设置;2.删除em相关的同义词:select drop public synonym ||syn…

oracle导出数据视频教程,Oracle导入导出数据的几种方式

oracle导入导出数据1.导出dmp格式文件--备份某几张表 &#xff01;&#xff01;&#xff01;&#xff01;exp smsc/smsc file/data/oracle_bak/dmp/bakup0209_2.dmp tables\(send_msg_his,send_msg,recv_msg_his,recv_msg\)--备份整个数据库 &#xff01;&#xff01;&#xff…

oracle undo管理机制,Oracle UNDO数据概念和管理

UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性.UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使…

php ldap 模块,不重新编译为PHP增加LDAP模块的支持

不重新编译为PHP增加LDAP模块的支持2018-11-28安装步骤1、进入到php安装源码目录rootvm-199:~/lnmp0.9# cd php-5.3.28rootvm-199:~/lnmp0.9/php-5.3.28# cd ext/ldap/rootvm-199:~/lnmp0.9/php-5.3.28/ext/ldap# lltotal 136drwxr-xr-x 3 501 staff 4096 2014-08-06 17:17 ./d…

oracle11区分大小写,修改Oracle11g用户密码不区分大小写

连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> show  parameter sec_case_sensitive_logonNAME TYPE VAL…

linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

本文仅限于介绍 linux 下的库。1.2、 库的种类linux 下的库有两种&#xff1a;静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序&#xff0c;因此体积较大。静态用.a为后缀&#xff0c; 例如&#xff1a; libhell…

linux服务器做页面,linux服务器搭建在线预览环境

linux版本 Centos.x86_64需要下载的工具包openoffice选择 Linux x86_64 rpm chinese简体中文包解压并安装安装openofficetar zxvf Apache_OpenOffice_4.0.1_Linux_x86-64_install-rpm_zh-CN.tar.gzcd RPEMrpm -Uivh *.rpm --nodeps –force启动openofficesoffice -headless -ac…

linux ssh 防火墙端口设置,linux修改SSH端口与iptables防火墙配置linux操作系统 -电脑资料...

一般情况下我们都不会使用系统默认的22端口做为ssh连接端口了&#xff0c;下面我来给大家介绍linux修改SSH端口然后再在iptables防火墙配置打开你配置的端口方法&#xff0c;如果你开了ssh端口没有在iptables防火墙配置依然会连接不上哦&#xff0c;linux修改ssh端口22代码如下…

linux为什么要禁止内核抢占,为什么linux在内核代码持有自旋锁后禁用内核抢占?...

我是Linux的新手,正在阅读Rubini& amp;的Linux设备驱动程序.科比特.我对一个与自旋锁相关的陈述感到困惑;这本书说明If a nonpreemptive uniprocessor system ever went into aspin on a lock, it would spin forever; no other thread would ever be able to obtainthe CP…

英飞凌TC3xx之一起认识DSADC系列(七)应用实战项目二(实现旋变软解码)

英飞凌TC3xx之一起认识DSADC系列(七) 1 项目要求2 项目实现2.1 内部时钟配置2.2 输入信号配置2.3 调制器配置2.4 滤波器链路配置2.5 整流器配置3 总结本文写一篇关于DSADC的resover的载波信号生成的应用,刚刚接触DSADC的开发者很容易被手册中简短的文字描述弄的迷惑,它到底…

linux 两块硬盘 分区,linux 两块硬盘分区,这个是什么/dev/mapper/VolGroup00-LogVol00

df -lh查看Filesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup00-LogVol00 1.8T 823G 874G 49% //dev/sda1 99M 13M 82M 14% /boottmpfs 7.8G 4.1G 3.8G 53% /dev/shm安装的时候/dev/sdb1 是挂在/home下面的&#xff0c;现在怎么找不到了现在我怎么查看/dev/sdb1…

linux qemu运行windows,用qemu搭建CentOS 6 for colinux虚拟系统——《Windows下搭建CentOS 6开发环境之一》...

用qemu搭建CentOS 6 for colinux虚拟系统一、安装的软硬件环境操作系统&#xff1a; Windows XP SP3硬件环境&#xff1a; CPU AMD 速龙AthlonII X3 445 (3.1GHz/AM3/3*512KB二缓/45纳米)内存 Corsair 海盗船 CMX4GX3M2A1600C9 DDR3 1600 4G(2G*2)硬盘 Seagate 希捷 ST3100052…

linux如何运行verilog,linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令.doc...

linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令ncverilog: 08.10-p002: (c) Copyright 1995-2008 Cadence Design Systems, Inc.Usage:ncverilog [options] filesFile languages: Verilog, SystemVerilog, VHDL, e, System-C, C, CIn addition to the dash opt…

linux服务器p2v,使用 Linux dd 命令实现 P2V 或 V2V

原标题&#xff1a;使用 Linux dd 命令实现 P2V 或 V2V迁移逻辑1、源虚拟机通过liveCD启动2、建立空白目标虚拟机&#xff0c;CPU、内存、网卡、磁盘等参数配置一致&#xff0c;并通过liveCD启动3、磁盘通过dd命令实现复制LiveCD和模板选择1、注意虚拟机模板和LiveCD版本选择2、…

linux tunl0 ip,Centos7下lvs负载均衡lvs-tun模式配置

一、架构director:172.28.18.69 vip:172.28.18.70real server1:172.28.18.71real server2:172.28.18.78二、两台real server上安装nginx配置nginx yum源[rootlocalhost ~]# vim /etc/yum.repos.d/nginx.repo[nginx]namenginx repobaseurlhttp://nginx.org/packages/centos/7/$b…

linux下查看进程的线程数,linux查看进程的线程数

top -H -p $PID #查看对应进程的那个线程占用CPU过高1、top -H手册中说&#xff1a;-H : Threads toggle加上这个选项启动top&#xff0c;top一行显示一个线程。否则&#xff0c;它一行显示一个进程。2、ps xH手册中说&#xff1a;H Show threads as if they were processes这…

linux操作系统字段含义,Linux系统 /etc/fstab各个字段含义解释

Linux系统 /etc/fstab各个字段含义解释# fstab文件的作用文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件&#xff0c;则可以通过"mount /directoryname"命令来加载一个文件系统&#xff0c;每种文件系统都对应一个独立的行&#xff0c;每行中的字…