批量修改文章中的标签
实在受不了syntax highlighter的速度,所以暂时去找了个wp-syntax高亮插件来代替。问题来了,我之前使用时标签都是类似:[c][/c],[php][/php]的,当时偷懒不想写完整的标签。但是wp-syntax只支持类似<pre lang=”language” line=”1″></pre>之类的标签。只好想法去修改了,但是手工修改的工作量太大,于是继续想懒办法。
解决的方法肯定是正则表达式了。所以用php写了个,数据库就按照wp的结构来。下面是代码:
<?php mysql_connect("localhost" , "mysqlname" ,"passwd") or die("can't connect to server"); //这句很关键,如果不设定,读取的全部是乱码,update后数据库中保存的也就成乱码了。 mysql_query("SET NAMES 'UTF8'"); mysql_select_db("dbname"); //修改所有文章. $result = mysql_query("select ID ,post_content from wp_posts"); while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){ $rst = rp($row["post_content"]); $id = $row["ID"]; $sqlupdate = "update wp_posts set post_content = '$rst' where ID = $id"; mysql_query($sqlupdate); //sleep(10);这句话如果有的话,执行时间过长。超过了30s的最大执行时间。没找到怎么取消这个时间限制。 } echo "ok"; //下面是只修改其中一篇文章时的代码. /* $result = mysql_query("select ID,post_content from wp_posts where ID=197"); $row = mysql_fetch_row($result); $id = $row[0]; //ID $rst = rp($row[1]);//post_content $sqlupdate = "update wp_posts set post_content = '$rst' where ID = $id"; mysql_query($sqlupdate); echo "ok"; */ function rp($rst){ $pattern = array( "/\[c\](.*?)\[\/c\]/is", "/\[cpp\](.*?)\[\/cpp\]/is", "/\[php\](.*?)\[\/php\]/is", "/\[css\](.*?)\[\/css\]/is", "/\[html\](.*?)\[\/html\]/is" ); $replace = array( "<pre lang=\"c\" line=\"1\">\${1}</pre>", "<pre lang=\"cpp\" line=\"1\">\${1}</pre>", "<pre lang=\"php\" line=\"1\">\${1}</pre>", "<pre lang=\"css\" line=\"1\">\${1}</pre>", "<pre lang=\"html\" line=\"1\">\${1}</pre>" ); return preg_replace($pattern,$replace,$rst); } ?>
你看到的我现在的文章,就是用这个方法修改的。不过,遇到点小问题,有几篇竟然没有转换过去,而当我用修改单篇文章的方式修改时又可以,难道是因为我执行时间太短,还是mysql请求太频繁?
早上4点20了,要睡了额。
随笔:很喜欢刘未鹏大师的一幅画。
看完了^.^,如果觉得这篇文章对你有用或者有
问题,请留言告诉我,thank you !
文章为原创的话,转载请注明出处.不敢流泪-《批量修改文章中的标签》
2 Comments are ready?
这样会很慢吧?
用vim或者sed都挺方便的
boluor 回复 于 八月 23rd, 2009 at 12:11
用vim和sed是可以的,不过那样我得一个个得把文章给拷贝,处理,再粘贴,比较麻烦。
话说效率貌似也不慢阿,除了不知道为什么有几篇没有转过去外,其他的都是一次性的就转换好了。
直接在数据库里替换行的不?
boluor 回复 于 八月 23rd, 2009 at 18:28
你是指在数据库中手工修改还是用SQL语句?如果是SQL语句的话,我不是很熟,尤其是要用正则表达式替换。手工修改就没得说啦,有几篇文章我就是用PhpMyAdmin直接修改的。