使用过linux服务器的童鞋应该知道,在linux中,文件、文件夹的命名都不能使用中文,如果你的图片是有中文字符,那么在浏览器中是不会显示的,但是因为在中国,大部分的服务器都是windows的,因为以前的网站程序大多用的是iis,而现在,遇到程序改版,改版成php,并且将原来的数据导入到mysql等后,我们发现文章中有大量的图片是中文字符,下面我就简单的写了一个小功能来解决这个问题。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
<?php set_time_limit(0); header("Content-Type:text/html;charset=utf-8"); //这几个参数需要配置 $dbHost = 'localhost';//服务器 $dbUser = 'root';//用户名 $dbPwd = '123456';//密码 $dbDate = 'rjtnb';//数据库名 set_time_limit(0); $con = mysql_connect($dbHost,$dbUser,$dbPwd); if(empty($con)){ echo '连接服务器失败'; } mysql_query("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary",$con); $conni = mysql_select_db($dbDate,$con); if(empty($conni)){ echo '选择数据库失败'; } /*access链接结束*/ ?> <html> <head> <title>将数据库文章内容的图片转化为拼音</title> </head> <body> <form method="post" action=""> 请保证本文件位置可以找到图片文件!<br /> 要修改的数据表: <input type="text" name="table" value="<?php echo @$_POST['table'];?>" size="" /> 要修改的字段: <input type="text" name="ziduan" value="<?php echo @$_POST['ziduan'];?>" size="" /> <input type="submit" name="submit" value="提交" /><br /> <?php $sub = @$_POST['submit']; $table = @$_POST['table']; $ziduan = @$_POST['ziduan']; if($sub&&$table&&$ziduan){ function Pinyin($_String, $modoul='', $_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 = array(); for($i=0; $i<mb_strlen($_String); $i++) { $_P = ord(mb_substr($_String, $i, 1)); if($_P>160) { $_Q = ord(mb_substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; } $_Res[]= _Pinyin($_P, $_Data); } if($modoul=='') { return $_Res; }else { $strings = ''; foreach($_Res as $key=>$value) { $strings .= $value; } return $strings; } //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//IGNORE', $_C); } function _Array_Combine($_Arr1, $_Arr2) { for($i=0; $i<count($_Arr1); $i++) $_Res[$_Arr1[$i]] = $_Arr2[$i]; return $_Res; } //Pinyin($str,true,1)) print str_repeat(" ", 4096); $sql = "select `id`,`$ziduan` from `$table` where 1"; $query = mysql_query($sql); while($rs=mysql_fetch_array($query)){ $id = $rs['id']; echo $id.' '; $content = $rs[$ziduan]; preg_match_all('/<img.+src=\"\/upload\/images\/?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>/i',$content,$match); if($match){ foreach($match[1] as $key=>$val){ preg_match("/[\x{4e00}-\x{9fa5}]/u",$val,$a); if(@$a['0']){ $pinyin = Pinyin($val,true,1); $f = iconv("UTF-8","gb2312",$val); $file = 'upload/images/'.$f; if(is_file($file)){ if(!rename('upload/images/'.$f,'upload/images/'.$pinyin)){ echo '修改《'.$val.'》->'.$pinyin.' 失败 结束操作,不影响上面的数据'; exit; } }else{ echo '文件中没找到《'.$val.'》这个图片 '; } echo '数据中<'.$val.'->'.$pinyin.'>成功 '; //过滤正则中的特殊字符,如果有其他的可以再加 $val = str_ireplace('.','\.',$val); $val = str_ireplace('(','\(',$val); $val = str_ireplace(')','\)',$val); $content = preg_replace('|'.$val.'|',"$pinyin",$content); }else{ echo $val.'->不转化 '; } } $content = addslashes($content); $sql2 = "update `$table` set `$ziduan` = '$content' where `id` = '$id'"; $query2 = mysql_query($sql2); if($query2){ echo $id.'->数据更新成功!'; }else{ echo $id.'->数据更新失败!结束操作,不影响前面操作!';exit; } }else{ echo '没有图片 '; } echo '<br />'; ob_flush(); flush(); } echo '完成!<a href="ceshi.php?ziduan='.$ziduan.'&table='.$table.'" target="_blank">测试</a>'; } ?> </form> </body> </html> |
这段代码是一个完整的功能,配置好链接自己的数据库,然后将这个文件放在可以读取到图片文件的位置,访问即可,访问后,会让你填写要替换的数据表和字段,这个程序会先判断字段中是否有中文图片路径,如果有,就会将这个图片路径转化为中文,并且会将图片进行重命名,如果找不到图片,他会仅改数据库的图片路径,然后你可以在上传一个对应的图片。
要注意的是,这个程序肯定是要在windows的服务器下使用,可以是你自己本地的程序,将数据库替换了之后,再将重命名后的图片都传上服务器即可。经使用发现还是可以的,虽然有些粗糙,但是我写这个仅仅是为了实现这样一个目的而已,毕竟这样的功能可能也不长用到。但是这个例子可以让我们联想到实现一些其他的功能。
本文链接:http://www.521php.com/archives/1066/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1066/