Home >php教程 >php手册 >PHP学习系列(1)字符串处理函数(3),php函数

PHP学习系列(1)字符串处理函数(3),php函数

WBOY
WBOYOriginal
2016-06-13 09:24:231234browse

PHP学习系列(1)——字符串处理函数(3),php函数

11、crc32() 函数计算一个字符串的 crc32 多项式。生成 string 参数的 32 位循环冗余校验码多项式。该函数可用于验证数据的完整性。

语法:crc32(string)

注意:由于 PHP 的整数是带符号的,许多 crc32 校验码将返回负整数,因此您需要使用 sprintf() 或 printf() 的 "%u" 格式符来获取表示无符号 crc32 校验码的字符串。

例子 1

在本例中,我们将在使用以及不使用 "%u" 格式符的情况下,输出 crc32() 的结果(注意结果是相同的):

<?<span>php
</span><span>$str</span> = <span>crc32</span>("Hello world!"<span>);
</span><span>echo</span> 'Without %u: '.<span>$str</span>."<br />"<span>;
</span><span>echo</span> 'With %u: '<span>;
</span><span>printf</span>("%u",<span>$str</span><span>);
</span>?>

输出:

Without %u: 461707669
With %u: 461707669
例子 2

在本例中,我们将在使用以及不使用 "%u" 格式符的情况下,输出 crc32() 的结果(注意结果是不相同的):

<?<span>php
</span><span>$str</span> = <span>crc32</span>("Hello world."<span>);
</span><span>echo</span> 'Without %u: '.<span>$str</span>."<br />"<span>;
</span><span>echo</span> 'With %u: '<span>;
</span><span>printf</span>("%u",<span>$str</span><span>);
</span>?>

输出:

Without %u: -1959132156
With %u: 2335835140

12、crypt() 函数返回使用 DES、Blowfish 或 MD5 加密的字符串。在不同的操作系统上,本函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法可用以及使用什么算法。

语法:crypt(str,salt)

salt参数可选。用于增加被编码字符数目的字符串,以使编码更加安全。如果未提供 salt 参数,则每次调用该函数时会随机生成一个。

确切的算法依赖于 salt 参数的格式和长度。

下面是与 crypt() 函数一起使用的一些常量。在安装时,由 PHP 设置这些常量:

  • [CRYPT_SALT_LENGTH]
  • [CRYPT_STD_DES]
  • [CRYPT_EXT_DES]
  • [CRYPT_MD5]
  • [CRYPT_BLOWFISH]

注意:解密算法是没有的,这是一种单向加密方法

在本例中,我们将测试不同的算法:

<?<span>php
</span><span>if</span> (CRYPT_STD_DES == 1<span>)
{
</span><span>echo</span> "Standard DES: ".<span>crypt</span>("hello world")."\n<br />"<span>;
}
</span><span>else</span><span>
{
</span><span>echo</span> "Standard DES not supported.\n<br />"<span>;
}

</span><span>if</span> (CRYPT_EXT_DES == 1<span>)
{
</span><span>echo</span> "Extended DES: ".<span>crypt</span>("hello world")."\n<br />"<span>;
}
</span><span>else</span><span>
{
</span><span>echo</span> "Extended DES not supported.\n<br />"<span>;
}

</span><span>if</span> (CRYPT_MD5 == 1<span>)
{
</span><span>echo</span> "MD5: ".<span>crypt</span>("hello world")."\n<br />"<span>;
}
</span><span>else</span><span>
{
</span><span>echo</span> "MD5 not supported.\n<br />"<span>;
}

</span><span>if</span> (CRYPT_BLOWFISH == 1<span>)
{
</span><span>echo</span> "Blowfish: ".<span>crypt</span>("hello world"<span>);
}
</span><span>else</span><span>
{
</span><span>echo</span> "Blowfish DES not supported."<span>;
}
?></span>

输出类似(依赖于操作系统):

Standard DES: $1$r35.Y52.$iyiFuvM.zFGsscpU0aZ4e. 
Extended DES not supported. 
MD5: $1$BN1.0I2.$8oBI/4mufxK6Tq89M12mk/ 
Blowfish DES not supported.
13、explode() 函数把字符串分割为数组。
语法:explode(separator,string,limit)
说明:本函数返回由字符串组成的数组,其中的每个元素都是由 separator 作为边界点分割出来的子字符串。
separator 参数不能是空字符串。如果 separator 为空字符串(""),explode() 将返回 FALSE。
如果 separator 所包含的值在string 中找不到,那么 explode() 将返回包含 string 中单个元素的数组。如果设置了 limit 参数,
则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。
此特性是 PHP 5.1.0 中新增的。
注意:参数 limit 是在 PHP 4.0.1 中加入的。由于历史原因,虽然 implode() 可以接收两种参数顺序,但是 explode() 不行。
你必须保证 <em>separator</em> 参数在 <em>string</em> 参数之前才行。

例子:在本例中,我们将把字符串分割为数组:

<?<span>php
</span><span>$str</span> = "Hello world. It's a beautiful day."<span>;
</span><span>print_r</span> (<span>explode</span>(" ",<span>$str</span><span>));
</span>?>

输出:

Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)
 
14、fprintf() 函数把格式化的字符串写到指定的输出流(例如:文件或数据库)。

该函数返回被写字符串的长度。

语法
fprintf(stream,format,arg1,arg2,arg++)

stream——可选。规定在哪里写/输出字符串。

format——必需。转换格式。

arg1——必需。规定插到 format 字符串中第一个 % 符号处的参数。

arg2——可选。规定插到 format 字符串中第二个 % 符号处的参数。

arg++——可选。规定插到 format 字符串中第三、四等等 % 符号处的参数。

说明:参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:
  • %% - 返回百分比符号
  • %b - 二进制数
  • %c - 依照 ASCII 值的字符
  • %d - 带符号十进制数
  • %e - 可续计数法(比如 1.5e+3)
  • %u - 无符号十进制数
  • %f - 浮点数(local settings aware)
  • %F - 浮点数(not local settings aware)
  • %o - 八进制数
  • %s - 字符串
  • %x - 十六进制数(小写字母)
  • %X - 十六进制数(大写字母)

arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

提示和注释

注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入 % 符号之后,由数字和 "\$" 组成。请参见例子 3。

提示: 相关函数: printf()、 sprintf()、 vfprintf()、 vprintf() 以及 vsprintf()。

例子

例子 1
<?php
$str = "Hello";
$number = 123;
$file = fopen("test.txt","w");
echo <code>fprintf($file,"%s world. Day number %u",$str,$number)</code>;
?>

输出:

27

以下文本将写入 "test.txt":

Hello world. Day number 123
例子 2
<?php
$number = 123;
$file = fopen("test.txt","w");
<code>fprintf($file,"%f",$number);</code>
?>

输出:

123.000000
例子 3

使用占位符:

<?php
$number = 123;
$file = fopen("test.txt","w");
<code>fprintf($file,"With 2 decimals: %1\$.2f\nWith no decimals: %1\$u",$number)</code>;
?>

以下文本将写入 "test.txt":

With 2 decimals: 123.00
With no decimals: 123

15、hebrev() 函数把希伯来文本从右至左的流转换为左至右的流。只有 224 至 251 之间的 ASCII 字符,以及标点符号受到影响。

语法:hebrev(string,maxcharline)

maxcharline——规定每行的最大字符数。如果可能,hebrev() 将避免把单词断开。

说明:hebrev() 和 hebrevc() 可以把希伯来逻辑文本转换为希伯来可见文本。希伯来可见文本不需要特殊的右至左字符支持,这使它对于在 web 上显示希伯来文本很有用处。

<br /> 

php 怎处理字符串

大家通过对PHP的学习,可以运用这一高级语言创建一个性能较高的网站。对于初学者来说,对于PHP字符串mbstring还是比较陌生的,下面我们就来介绍一下PHP字符串mbstring的具体应用。

多国语言并存就意味着多字节,PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。

采用PHP字符串mbstring可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:

1. 在php.ini中设置mbstring.internal_encoding = UTF-8

2. 调用mb_internal_encoding(”GBK”)

除了PHP字符串mbstring,还有很多切割函数,其中mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。而且从函数切割对长度的作用也不同,mb_strcut的切割条件是小于strlen, mb_substr是等于strlen,看下面的例子,



输出如下:

mb_substr:我是一串比较

mb_strcut:我是

需要注意的是,PHP字符串mbstring并不是PHP核心函数,使用前需要确保在php编译模块时加入mbstring的支持:

(1)编译时使用–enable-mbstring

(2)修改/usr/local/lib/php.inc

default_charset = “zh-cn”

mbstring.language = zh-cn

mbstring.internal_encoding =zh-cn

PHP字符串mbstring类库内容比较多,还包括mb_ send_ mail 之类的email处理函数等
 

php 字符串加1 是否有直接函数?或代码写法

想指出的是楼主这种“在字符串上做算术运算”的需求是比较扭曲的,
即使实现,从性能效率的角度是非常低下。个人没有看出任何实用和理论意义。
可以看成2部分
字母部分,为26进制(如果字符集包括中文将成为几万进制),a=1...z=26 有z+a=26+1=aa 接受10进制加法输入
数字部分,为10进制,9+1=10,

而且还缺少对“a999+1后是否进位?怎么进位?”进行说明
结果有多个可能
1、不进位。a999+1得a000 ,
2、仅10进制部分进位。a999+1得a1000
2、整体进位。a999+1得b000

需要说明这点后才可能写出实现
 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn