Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法


Posted in PHP onDecember 29, 2010

NextGEN Gallery是Wordpress中著名的相册插件,遗憾的是不支持中文等unicode字符,本文将介绍如何将目录转换为拼音(添加图集时)。

以NextGEN 1.6.2为例:

“新增图集/图片”的路径是:admin.php?page=nggallery-add-gallery,我们在nextgen-gallery/admin/admin.php中查找“nggallery-add-gallery”,

switch ($_GET['page']){ 
case "nggallery-add-gallery" : 
include_once ( dirname (__FILE__) . '/functions.php' ); // admin functions 
include_once ( dirname (__FILE__) . '/addgallery.php' ); // nggallery_admin_add_gallery 
$ngg->addgallery_page = new nggAddGallery (); 
$ngg->addgallery_page->controller(); 
break;

类nggAddGallery在addgallery.php中,鼠标悬停在”新增图集“Tab上时从浏览器的状态栏可以看到URL是 admin.php?page=nggallery-add-gallery#addgallery , 在addgallery.php中查找"addgallery"看到其调用了:
nggAdmin::create_gallery($newgallery, $defaultpath);
nggAdmin类位于functions.php中,create_gallery函数修改如下:(红色粗体是新增加的行)
require_once('cn2pinyin.php'); 
/** 
* nggAdmin - Class for admin operation 
* 
* @package NextGEN Gallery 
* @author Alex Rabe 
* @copyright 2007-2010 
* @access public 
*/ 
class nggAdmin{ 
/** 
* create a new gallery & folder 
* 
* 添加中文支持 by:Elf Sundae 
* 
* @class nggAdmin 
* @param string $gallerytitle 
* @param string $defaultpath 
* @param bool $output if the function should show an error messsage or not 
* @return 
*/ 
function create_gallery($gallerytitle, $defaultpath, $output = true) { 
global $wpdb, $user_ID; 
// get the current user ID 
get_currentuserinfo(); 
//cleanup pathname 
$galleryname = sanitize_file_name( $gallerytitle ); 
// 中文转换为拼音 
$galleryname = cn2pinyin($galleryname,1); 
$galleryname = apply_filters('ngg_gallery_name', $galleryname); 
$nggpath = $defaultpath . $galleryname; 
$nggRoot = WINABSPATH . $defaultpath; 
$txt = '';

其中cn2pinyin是汉字转换为拼音的函数,位于cn2pinyin.php(新建此文件)中。
cn2pinyin.php
<?php 
/** 
* 
* 中文转换为拼音 
* 
*/ 
function cn2pinyin($_String, $_Code='gb2312') { 
$_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha" . 
"|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|" . 
"cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er" . 
"|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui" . 
"|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang" . 
"|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang" . 
"|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue" . 
"|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne" . 
"|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen" . 
"|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang" . 
"|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|" . 
"she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|" . 
"tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu" . 
"|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you" . 
"|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|" . 
"zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"; 
$_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990" . 
"|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725" . 
"|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263" . 
"|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003" . 
"|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697" . 
"|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211" . 
"|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922" . 
"|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468" . 
"|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664" . 
"|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407" . 
"|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959" . 
"|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652" . 
"|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369" . 
"|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128" . 
"|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914" . 
"|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645" . 
"|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149" . 
"|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087" . 
"|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658" . 
"|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340" . 
"|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888" . 
"|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585" . 
"|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847" . 
"|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055" . 
"|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780" . 
"|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274" . 
"|-10270|-10262|-10260|-10256|-10254"; 
$_TDataKey = explode('|', $_DataKey); 
$_TDataValue = explode('|', $_DataValue); 
$_Data = (PHP_VERSION >= '5.0') ? array_combine($_TDataKey, $_TDataValue) : _Array_Combine($_TDataKey, $_TDataValue); 
arsort($_Data); 
reset($_Data); 
if ($_Code != 'gb2312') 
$_String = _U2_Utf8_Gb($_String); 
$_Res = ''; 
for ($i = 0; $i < strlen($_String); $i++) { 
$_P = ord(substr($_String, $i, 1)); 
if ($_P > 160) { 
$_Q = ord(substr($_String, ++$i, 1)); 
$_P = $_P * 256 + $_Q - 65536; 
} 
$_Res .= _Pinyin($_P, $_Data); 
} 
return preg_replace("/[^a-z0-9]*/", '', $_Res); 
} 
function _Pinyin($_Num, $_Data) { 
if ($_Num > 0 && $_Num < 160) 
return chr($_Num); 
elseif ($_Num < -20319 || $_Num > -10247) 
return ''; 
else { 
foreach ($_Data as $k => $v) { 
if ($v <= $_Num) 
break; 
} 
return $k; 
} 
} 
function _U2_Utf8_Gb($_C) { 
$_String = ''; 
if ($_C < 0x80) 
$_String .= $_C; 
elseif ($_C < 0x800) { 
$_String .= chr(0xC0 | $_C >> 6); 
$_String .= chr(0x80 | $_C & 0x3F); 
} elseif ($_C < 0x10000) { 
$_String .= chr(0xE0 | $_C >> 12); 
$_String .= chr(0x80 | $_C >> 6 & 0x3F); 
$_String .= chr(0x80 | $_C & 0x3F); 
} elseif ($_C < 0x200000) { 
$_String .= chr(0xF0 | $_C >> 18); 
$_String .= chr(0x80 | $_C >> 12 & 0x3F); 
$_String .= chr(0x80 | $_C >> 6 & 0x3F); 
$_String .= chr(0x80 | $_C & 0x3F); 
} 
return iconv('UTF-8', 'GB2312', $_String); 
} 
function _Array_Combine($_Arr1, $_Arr2) { 
for ($i = 0; $i < count($_Arr1); $i++) 
$_Res[$_Arr1[$i]] = $_Arr2[$i]; 
return $_Res; 
} 
//用法: 
//第二个参数留空则为gb1232编码 
//echo cn2pinyin('中文测试'); 
//第二个参数随意设置则为utf-8编码 
//echo cn2pinyin('中文测试',1); 
?>

download cn2pinyin.php at: http://xiazai.3water.com/201012/yuanma/cn2pinyin.rar
另外,修改“新增图集”中的名称支持字符提示:
addgallery.php 中,Line:304
function tab_addgallery() { 
?> 
<!-- create gallery --> 
/// .... 
<?php _e('Create a new , empty gallery below the folder', 'nggallery') ;?> <strong><?php echo $this->defaultpath ?></strong><br /> 
<?php } ?> 
<i>(图集名称支持以下字符:中文、A-Z、a-z、0-9、-、_ ,中文将自动转换为拼音)</i></td> 
</tr> 
<?php do_action('ngg_add_new_gallery_form'); ?> 
</table> 
//... 
</form>
PHP 相关文章推荐
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
php实现的双向队列类实例
Sep 24 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
php屏蔽错误及提示的方法
May 10 PHP
服务器web工具 php环境下
Dec 29 #PHP
php cookie的操作实现代码(登录)
Dec 29 #PHP
PHP 图片文件上传实现代码
Dec 29 #PHP
php目录操作函数之获取目录与文件的类型
Dec 29 #PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 #PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 #PHP
php输出表格的实现代码(修正版)
Dec 29 #PHP
You might like
php中$this-&amp;gt;含义分析
2009/11/29 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
用JS实现的一个include函数
2007/07/21 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
django中related_name的用法说明
2020/05/20 Python
python自定义函数def的应用详解
2020/06/03 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
评职称个人总结
2015/03/05 职场文书
高中地理教学反思
2016/02/19 职场文书
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS