当前位置:首页 » 编程语言 » php编码函数

php编码函数

发布时间: 2022-04-22 04:06:06

php 几个字节 函数

有两个函数可以取PHP字符串长度
----------------------------------------------------------------------
strlen — 获取字符串长度

int strlen ( string $string )

返回给定的字符串 string 的长度。参数 string 需要计算长度的字符串。

返回值 成功则返回字符串 string 的长度;如果 string 为空,则返回 0。

----------------------------------------------------------------------
mb_strlen — 获取字符串的长度 (PHP 4 >= 4.0.6, PHP 5)

mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
获取一个 string 的长度。

参数 str 要检查长度的字符串。
encoding 参数为字符编码。如果省略,则使用内部字符编码。

返回值
返回具有 encoding 编码的字符串 str 包含的字符数。 多字节的字符被计为 1。
如果给定的 encoding 无效则返回 FALSE。

特别要注意的是:

有关中文的问题。PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

Ⅱ PHP有没有判断一个文件或者一段字符串是什么编码的函数

测试:将 text1.txt 保存成 ASCII编码, text2.txt 保存成 UTF-8 编码

<?php
function chkCode($string){
$code = array('ASCII', 'GBK', 'UTF-8');
foreach($code as $c){
if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){
return $c;
}
}
return null;
}

$file = 'text1.txt';
echo chkCode(file_get_contents($file)); // 输出ASCII
echo '<br />';

$file = 'text2.txt';
echo chkCode(file_get_contents($file)); // 输出UTF-8
echo '<br />';
?>

Ⅲ php中编码转换问题

function uc2html($str) {
$ret = ' ';
for( $i=0; $i <strlen($str)/2; $i++ ) {
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$ret .= iconv( "utf-8 ", "gb2312 ",u2utf8($charcode));
}
return $ret;
}

function u2utf8($c) {
$str= " ";
if ($c < 0x80) {
$str.=$c;
} else if ($c < 0x800) {
$str.=chr(0xC0 | $c> > 6);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c> > 12);
$str.=chr(0x80 | $c> > 6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c> > 18);
$str.=chr(0x80 | $c> > 12 & 0x3F);
$str.=chr(0x80 | $c> > 6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return $str;
}
如果你不是smarty的话 试试这个 如果是smarty的话 用下面的方法
<?php

/*
@Author: 蜗牛
@Blog: http://www.00562.com

@Note: 这个解决办法是基于上面那个地址提到的方法,解决了中英文截取长度时出现乱码的问题
*/

function smarty_modifier_truncate($string, $sublen = 80, $etc = '...', $break_words = false, $middle = false)
{
$start=0;
$code="UTF-8";
if($code == 'UTF-8')
{
//如果有中文则减去中文的个数
$cncount=cncount($string);
if($cncount>($sublen/2))
{
$sublen=ceil($sublen/2);
}
else
{
$sublen=$sublen-$cncount;
}

$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa, $string, $t_string);

if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
return join('', array_slice($t_string[0], $start, $sublen));
}
else
{
$start = $start*2;
$sublen = $sublen*2;
$strlen = strlen($string);
$tmpstr = '';

for($i=0; $i<$strlen; $i++)
{
if($i>=$start && $i<($start+$sublen))
{
if(ord(substr($string, $i, 1))>129)
{
$tmpstr.= substr($string, $i, 2);
}
else
{
$tmpstr.= substr($string, $i, 1);
}
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
return $tmpstr;
}

}

function cncount($str)
{
$len=strlen($str);
$cncount=0;

for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,$i,1);

if(ord($temp_str) > 127)
{
$cncount++;
}
}

return ceil($cncount/3);
}

?>
是可以的以上两种方法 site:www.00562.com

Ⅳ php的json_encode函数如何编码数组中的数组

你图里的files是一维数组,你加多一个array 变成二维 不就行了

"files"=>array(
array("name"=>"xxxxxx","content"=>"xxxxxxx"),

)

Ⅳ PHP函数urlencode和urldecode的问题。

很明显,这个编码函数有另外一个参数。就是指定编码方式的。
如果你安装utf-8编码进行编码的话,就和原来的不一样。
当你换成gb2312的时候就一样了。
因为选择的默认编码方式不同,所以会出现不同的结果。

Ⅵ php 里 mb_convert_encoding()函数,

不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

mb_convert_encoding的用法见官方:
http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一个GBK To UTF-8

复制代码代码如下:

<?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("你系我的友仔", "UTF-8", "GBK");
?>

再来个GB2312 To Big5

复制代码代码如下:

<?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

下面还有一些详细的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.

使用:

发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:

复制代码代码如下:

$content = iconv("GBK", "UTF-8", $content);
$content = mb_convert_encoding($content, "UTF-8","GBK");

PHP中使用mb_convert_encoding转码的小陷阱
在php程序中使用mb_convert_encoding()方法进行字符编码转换大家都很熟悉了,平时也在大量的使用。而且在一般情况下该方法也表现的足够好,值得表扬。但在一个项目中我们需要使用它进行UTF8到GBK的转换,在转换一些特殊字符时发现了一个不大不小的问题。具体表现为mb把在utf8可编码的字符而在gbk中不可编码的字符都转成了\0x00\0x80,这样就导致转换后的gbk字符是有问题的。
在我们的意识中,在进行字符编码转换的过程中,如果遇到目标编码不可表现的字符,转码程序应该做的是舍弃这种字符,这样虽然丢失了部分数据,但不会导致转码的字符序列不可用。不清楚mb为什么要使用上述方式而不是舍弃方式。
临时的解决方式是对转码后的字符串序列进行过滤,过滤掉所有\x00\80的字符;又或者在转义之前对utf8的字符串进行过滤,过滤掉ut8可表示而gbk不可表示的所有字符,从实现难度上来讲,第一种过滤方式比较容易做到。

Ⅶ php中把字符串编码用哪个函数成百度中地址栏中字符形式

一般中文编码为gb2312,gbk,gb18030都可以,有这些%C9%CF%BA%A3+%CC%EC%C6%F8&f=8&wd=%B1%B1%BE%A9是因为,他采用method为get方法,地址栏可以显示传递参数,wd好像是word,关键词,等号后的为北京的十六进制编码,当你的method=post的话,在址址栏不显示这些东西

Ⅷ php怎样判断字符串是什么编码

php判断字符编码的二个方法:
一个是用php自带的函数mb_detect_encoding,一个是个人写函数来处理。
方法1,使用mb_detect_encoding函数。
?

1
2
3
4

<?php
$str=”<a href="http://www..com/" target="_blank" class="infotextkey">脚本</a>”;
echo mb_detect_encoding($str);
?>

方法2,自定义函数。
?

1
2
3
4
5
6
7
8
9
10
11

<?php
function chkbm($string){
$bm = array(‘ASCII’, ‘GBK’, ‘UTF-8′);
foreach($bm as $c){
if( $string === <a href="http://www..com/" target="_blank" class="infotextkey">iconv</a>(‘UTF-8′, $c, iconv($c, ‘UTF-8′, $string))){//转换编码后是不是相等
return $c;
}
}
return null;
}
?>

Ⅸ php中如何转换变量的编码

functionunicode2utf8($str){
if(!$str)return$str;
$decode=json_decode($str);
if($decode)return$decode;
$str='["'.$str.'"]';
$decode=json_decode($str);
if(count($decode)==1){
return$decode[0];
}
return$str;
}

这是unicode编码,使用这个函数可以很好的将unicode编码转为utf-8编码。详细的原理可以参考这篇博文《php将unicode编码转为utf-8方法》:http://www.welefen.com/php-unicode-to-utf8.html

Ⅹ php提供了什么函数来对url进行编码

urlencode
:本函数将字符串以
URL
编码;
urldecode
:还原编码的字符串
语法:
string
urlencode(string
str);
韩顺平
老师的php入门到精通视频里面讲的有

热点内容
red5服务器搭建 发布:2025-01-28 00:56:49 浏览:679
遗传算法ppt 发布:2025-01-28 00:56:41 浏览:534
安卓手机连拍图片怎么保存 发布:2025-01-28 00:48:12 浏览:645
怎么看出车辆配置是不是旧车 发布:2025-01-28 00:42:42 浏览:3
编译时的程序在哪里 发布:2025-01-28 00:42:39 浏览:345
ftp协议的功能 发布:2025-01-28 00:38:53 浏览:251
linux统计ip 发布:2025-01-28 00:38:50 浏览:153
游戏解压泥 发布:2025-01-28 00:38:04 浏览:728
curlandroid下载 发布:2025-01-28 00:20:10 浏览:873
数控车编程视频 发布:2025-01-28 00:15:02 浏览:967