京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

PHP trim函数对多字节字符的使用限定实例探究

2024-11-3 18:53| 发布者: 284cc| 查看: 103| 评论: 0

摘要: 目次弁言什么是trim()函数?mbstring 扩展mb_trim、mb_ltrim 和 mb_rtrim弁言 先来判断下这段代码的输出是否同等? [code]$string = '沈唁 '; var_dump(trim($string)); var_dump(preg_replace('/^[
目次

弁言

先来判断下这段代码的输出是否同等?

[code]$string = '沈唁 '; var_dump(trim($string)); var_dump(preg_replace('/^[\s\0]+|[\s\0]+$/u', '', $string));[/code]

如果你觉得是同等的,那么就是大错特错了。

在日常工作中,经常需要处置处罚字符串。其中一种常用的情况是,需要删除字符串两端的空缺字符,这就是 [code]trim()[/code] 函数原本的作用。

但是标准的 [code]trim()[/code] 函数不能处置处罚多字节字符。

什么是trim()函数?

在PHP中, [code]trim()[/code] 函数用于删除字符串的开头和结尾的空缺字符。默认情况下,这些字符包括:

  • [code]"\0"[/code] - NULL
  • [code]"\t"[/code] - 制表符
  • [code]"\n"[/code] - 换行
  • [code]"\v"[/code] - 垂直制表符
  • [code]"\r"[/code] - 回车
  • [code]" "[/code] - 空格

mbstring 扩展

在很多语言中,每个须要字符都能一对一映射到 [code]8 bit[/code] 的值,但也有一些语言需要非常多的字符来书面通讯,以至于它们的编码范围不能仅仅包罗在一个字节里。

开辟多字节字符编码方案是为了在基于字节的通例编码体系中表达超过 256 个字符。

在使用[code]trim[/code]、[code]split[/code]、[code]splice[/code] 等等利用多字节编码的字符串的时候,特别需要注意,由于在这种编码方案下,两个或多个连续字节可能只表达了一个字符,以是需要使用专门的函数。 否则,你可能会得到一个以乱码的字符串结尾。

而 [code]mbstring[/code] 提供了针对多字节字符串的函数,可以或许帮开辟者处置处罚 PHP 中的多字节编码。

[code]mbstring[/code] 扩展的使用和平凡字符串利用函数同等,而且仅仅需要加上[code]mb_[/code]前缀即可。

类似于:

  • [code]split[/code] => [code]mb_split[/code]
  • [code]strlen[/code] => [code]mb_strlen[/code]
  • [code]substr[/code] => [code]mb_substr[/code]

以此类推,[code]trim[/code] 是不是可以直接改为调用[code]mb_trim[/code]?

答案是也不是。由于你可能会得到一个错误:

[code]PHP Fatal error:  Uncaught Error: Call to undefined function mb_trim()[/code]

[code]mb_trim[/code]、[code]mb_ltrim[/code] 和 [code]mb_rtrim[/code]

从 2022 年 8 月份就有人在 php-src 的 issue 举行了反馈,这三个函数也是前不久刚刚通过 RFC,合并到 PHP 内核中新增的。

https://github.com/php/php-src/commit/a80b6d7b99ae885cb450a563a788f57917cef74e

[code]function mb_trim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"): string function mb_ltrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string function mb_rtrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string[/code]

以是虽然 8.3 刚发布,但是 8.3 中确实没有这三个函数,可能需要在 8.3.1 中才气使用了。

不过 PHP 足够灵活,使我们可以或许根据需要创建自定义的函数,如多字节 [code]mb_trim()[/code] 函数。

[code]if (!function_exists('mb_trim')) { function mb_trim($string) { return preg_replace('/^[\s\0]+|[\s\0]+$/u', '', $string); } }[/code]

以上就是PHP trim函数对多字节字符的使用限定实例探究的详细内容,更多关于PHP trim限定多字节字符的资料请关注脚本之家别的相关文章!


来源:https://www.jb51.net/program/312684lwc.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-8-16 01:40 , Processed in 0.028893 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部