preg_replace_callback 实现比较优雅的替换
2015-11-11 19:11
302 查看
下面两种方法用于将类似한这样的片段转换成正常的文字
第一种方法先用正则将需要替换的片段找到,然后循环处理, 第二种方法使用了preg_replace_callback ,第二种方法代码量较少,看起来更加优雅.
方法一
<?php
$test_str="曾한李국어" ;
echo unescape($test_str);
function unescape($str) {
preg_match_all("/(?:%u.{4})|.{4};|\d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == ""){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "") {
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
?>
方法二
<?php
$test_str="曾한李국어" ;
echo preg_replace_callback("/(%u.{4})|.{4};|\d+;/ i", "unescape", $test_str);
function unescape($str_org) {
$str_org=$str_org[0];
if(substr($str_org,0,2) == "%u"){
$str_fin = iconv("UCS-2BE","UTF-8",pack("H4",substr($str_org,-4)));
}
elseif(substr($str_org,0,3) == ""){
$str_fin = iconv("UCS-2BE","UTF-8",pack("H4",substr($str_org,3,-1)));
}
elseif(substr($str_org,0,2) == "") {
$str_fin = iconv("UCS-2BE","UTF-8",pack("n",substr($str_org,2,-1)));
}
return $str_fin ;
}
?>
第一种方法先用正则将需要替换的片段找到,然后循环处理, 第二种方法使用了preg_replace_callback ,第二种方法代码量较少,看起来更加优雅.
方法一
<?php
$test_str="曾한李국어" ;
echo unescape($test_str);
function unescape($str) {
preg_match_all("/(?:%u.{4})|.{4};|\d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == ""){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "") {
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
?>
方法二
<?php
$test_str="曾한李국어" ;
echo preg_replace_callback("/(%u.{4})|.{4};|\d+;/ i", "unescape", $test_str);
function unescape($str_org) {
$str_org=$str_org[0];
if(substr($str_org,0,2) == "%u"){
$str_fin = iconv("UCS-2BE","UTF-8",pack("H4",substr($str_org,-4)));
}
elseif(substr($str_org,0,3) == ""){
$str_fin = iconv("UCS-2BE","UTF-8",pack("H4",substr($str_org,3,-1)));
}
elseif(substr($str_org,0,2) == "") {
$str_fin = iconv("UCS-2BE","UTF-8",pack("n",substr($str_org,2,-1)));
}
return $str_fin ;
}
?>
相关文章推荐
- shell中的条件表达式
- Unsafe类初探
- hashmap排序
- Python计算机视觉编程练习4:glob模块学习
- PHP接口API文档转换SDK【神器】
- android view requestLayout,invalidate 事件的分发,接收,以及处理
- NSUserDefaults简介及使用
- 二叉树先序遍历动态演示——python版
- fragment嵌套的问题
- 解决Xcode7.1运行卡顿的原因
- Paxos made simple 翻译尝试
- 多个ImageView 加载高清大图的内存管理
- OpenLayers 3 之 加载天地图
- Python + OpenCV模糊处理(Bluring)
- ubuntu14.04 install tomcat
- How to format a JavaScript date(jquery ,json ,日期)
- 岁月划过生命线——记我的大学生活(前言)
- matlab画甘特图(用任意多颜色表示任意多工件)
- Linux多线程实践(8) --Posix条件变量解决生产者消费者问题
- drawable中绘制双重的背景