请大神讲解下这段php代码,关于preg_replace_callback()函数

发布于 2022-09-03 08:52:39 字数 845 浏览 23 评论 0

$str =  preg_replace_callback(
            "#\\\u([0-9a-f]{4})#i", 
            function($matchs) 
            { 
                return  iconv('UCS-2BE', 'UTF-8',  pack('H4',  $matchs[1])); 
            }, 
            $str); 

我搜了搜相关资料,懂了个大概,但是精髓部分还是不明白。
1)preg_replace_callback()函数第一个参数应该是个正则表达式,用来匹配相关字符。但是,其中的两个‘#’和最后的那个i我不是很明白,是为了什么?
2)第二个参数是个闭包里面的参数$matchs是系统指定的?还是随便给个参数名都行?例如function($a),还有这个地方只能是闭包么,可以用函数改写么?
3)关于这个$matchs,经过我测试输出,它是个数组.matchs[0]是u8fd8,matchs[1]是8fd8。这是怎么做到的?利用前面那个正则表达式我只能匹配到matchs[0]的结果,去掉u的工作和再用matchs[1]保留去掉u后的结果是谁做的?莫非是那个‘#’后的i?

Array
(
    [0] => \u8fd8
    [1] => 8fd8
)

4)`iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));经过输出,iconv()函数的返回值是还这个iconv()函数内部是怎么组装出来还的呢?内部的pack函数中的H4作用是什么?是怎么加到8FD8前面的。

新手问题较多请大神们,不吝赐教。感激不尽!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌无敌 2022-09-10 08:52:39
  1. # 号可以替换成任何特殊符号, 只要不常见的就行, 你用 "~", "/", "#" 都是一样的, i表示不区分大小写

  2. 随便写, 不是一定要$match

  3. iconv是编码转换函数

上面这段代码的功能只是用来把UCS-2BE字符格式的字符串转换成汉字的。

http://bbs.csdn.net/topics/39...

断爱 2022-09-10 08:52:39

1 i 正则通配符 意思是 不区分大小写
2 $match变量名而已 可以随便写。一般这样使用
preg_replace_callback ( "/表达式/通配符", array($this,"a"), $string);
function a($m){

}
3 你没给匹配的字符串 无法回答

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文