最近做了一个功能就是在织梦里把文章内容的某些字随机替换成图片,据说是为了防采集。好了直接上代码。
1、在根目录下dede文件夹templets下的模板文件article_add.htm里面加上默认选中的复选框。<input type='checkbox' name='textobscurize' value='1' class='np' checked /> 启用图片替换
2、在根目录下dede文件夹下article_add.php里面的//处理body字段自动摘要、自动提取缩略图等$body = AnalyseHtmlBody($body,$description,$litpic,$keywords,'htmltext');下加上这些代码:
$_fonts = array('Songti'=>'simsun.ttc','Heiti'=>'simhei.ttf','Fangsong'=>'simfang.ttf','Kaiti'=>'simkai.ttf','Lishu'=>'simli.ttf','Youyuan'=>'simyou.ttf','Yahei'=>'msyh.ttf');//宋体 黑体 仿宋 楷体 隶书 幼圆 微软雅黑
foreach ($_fonts as $_k => $_v) {
$_fonts[$_k] = 'C:\\Windows\\fonts\\'.$_v;
}
$_colors = array('maroon' => '640000','black' => '000000','white' => 'ffffff', 'orange' => 'ff8000','grass' => '80ff00','green' => '008080','blue' => '0000ff','red' => 'ff0000');

$_font = !$_font ? 'Songti' : $_font;//字体 如 宋体 黑体
$_size = !$_size ? 12 : $_size;//字号 单位:像素
$_color = !$_color ? 'black' : $_color;//颜色 如 黑色 蓝色 绿色 红色
$_bgcolor = !$_bgcolor ? 'white': $_bgcolor;//背景颜色 如白色 红色 蓝色
$_rate = 5;//抽样几率 默认为5 越大几率越大 允许范围为1-20

function uni_encode($str){
$code = unpack("H6codes", iconv('gbk','utf-8',$str));
return $code['codes'];
}

function ikonv($src_enc, $dst_enc, $var){
if(is_array($var)){
foreach($var as $k => $v){
if(is_array($v)) $var[$k] = ikonv($src_enc, $dst_enc, $v);
else $var[$k] = iconv($src_enc, $dst_enc, $v);
}
return $var;
}else{
return iconv($src_enc, $dst_enc, $var);
}
}
//生成图片函数
function create_txtpic($word, $filename){
if(is_file($filename)) return;
global $_fonts, $_color, $_font, $_size, $_bgcolor;
$_width = $_height = ceil($_size * 1.25);

$image=ImageCreateTrueColor($_width, $_height);
ImageAlphaBlending($image, true);
ImageAntiAlias($image, true);
ImageSaveAlpha($image, true);
$black = ImageColorAllocate($image,0,0,0);
$white = ImageColorAllocate($image,255,255,255);
$orange = ImageColorAllocate($image,255,128,0);
$green = ImageColorAllocate($image,0,128,128);
$blue = ImageColorAllocate($image,0,0,255);
$red = ImageColorAllocate($image,255,0,0);
$bgcolor = !$_bgcolor ? $white : ${$_bgcolor};

ImageFill($image,0,0,$bgcolor);
$ret = @ImageTTFText($image, (float)($_size*0.875), 0, 0, $_size, ${$_color}, $_fonts[$_font], iconv('gbk','utf-8', $word) );
ImagePNG($image, $filename);
ImageDestroy($image);
if($ret === false) return false;
}

//防止str_replace函数替换中文时出现乱码
function chn_str_replace($needle,$string,$haystack) {//处理中文替换时,乱码
$l = strlen($haystack);
$l2 = strlen($needle);
$l3 = strlen($string);
$news = "";
$skip = 0;
$a = 0;
while ($a < $l) {
$ch = substr($haystack,$a,1);
$ch2 = substr($haystack,$a+1,1);
if (ord($ch) >= HexDec("0x81") && ord($ch2) >= HexDec("0x40")) {
if (substr($haystack,$a,$l2) == $needle) {
$news .= $string;
$a += $l2;
} else {
$news .= $ch.$ch2;
$a += 2;
}
} else {
if (substr($haystack,$a,$l2) == $needle) {
$news .= $string;
$a += $l2;
} else {
$news .= $ch;
$a++;
}
} // END IF
} // END WHILE
return $news;
}

//下面一直到for循环结束。先计算需要转换的字数,然后把需要转换的字放入数组打乱顺序,比如需要转换的字数是23,那就是在打乱顺序之后的数组中取出前23个字转换为图片。大家可以在下面打印出来看一下
if(empty($textobscurize)) $textobscurize = 0;
if($textobscurize){
$regex = "/(([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])|([".chr(0x81)."-".chr(0xa0)."][".chr(0x40)."-".chr(0xfe)."])|([".chr(0xaa)."-".chr(0xfe)."][".chr(0x40)."-".chr(0xa0)."]))/";
$regex_utf = "/[\x{4e00}-\x{9fa5}]/u";

if( preg_match($regex, $body) ){
$tmp_body = preg_replace("/<a.*>.*<\/a>/isU", '', $body);//暂时屏蔽超链接
$tmp_body = strip_tags($tmp_body);
$dsql->SetQuery("select keyword from dede_keywords where rpurl <> '' ");
$dsql->Execute();
while($myrow = $dsql->getArray()){
if(mb_strlen($myrow['keyword'], 'gbk') == 1){
$kws[] = $myrow['keyword'];
continue;
}
for($i = 0; $i < mb_strlen($myrow['keyword'], 'gbk'); $i ++){
$kws[] = mb_substr($myrow['keyword'], $i, 1, 'gbk');
}
}
$tmp_body = str_replace("&ldquo;",'',$tmp_body);
$tmp_body = str_replace("&rdquo;",'',$tmp_body);
$tmp_body = str_replace("&middot;",'',$tmp_body);
$tmp_body = str_replace("&mdash;",'',$tmp_body);
$tmp_body = str_replace("&lsquo;",'',$tmp_body);
$tmp_body = str_replace("&rsquo;",'',$tmp_body);

$tmp_body = str_replace($kws, '', $tmp_body);//暂时屏蔽自动替换关键词
if( strpos($_filter, ',') !== false ) $_filters = explode(',', $_filter);
else $_filters = $_filter;
$tmp_body = str_replace($_filters, '', $tmp_body);//暂时屏蔽保护关键词

preg_match_all($regex_utf, iconv('gbk', 'utf-8',$tmp_body), $result);
$zhs = array_unique(ikonv('utf-8', 'gbk', $result[0]));
//把数组也就是内容打乱顺序重新排列,因为如果不打乱的话只能把该段文字的前多少位转换为图片。打乱之后就是整篇文章中随意替换了
shuffle($zhs);
$zh_count = count($zhs);
$the_time = $zh_count/(strlen((string)$zh_count)*$_rate);

//需要转换的文字次数
$the_time = floor($the_time) < 1 ? 1 : floor($the_time);

//print_r($zhs);
//echo floor($the_time);
//循环转换图片
for ($i = 0; $i < $the_time; $i ++){
$word = $zhs[$i];
$clrs = str_split($_colors[$_color], 2);
$bgclrs = str_split($_colors[$_bgcolor], 2);
$file_name = $bgclrs[0].$clrs[0].uni_encode($word).$bgclrs[1].$clrs[1].dechex($_size).$bgclrs[2].$clrs[2];
$rel_path = '../images/swfupload/images/'.$file_name.'.png';
if(create_txtpic($word,$rel_path) === false) break;
$img = '<img src="/cc'.substr($rel_path,2).'" align=absmiddle alt="'.$word.'" />';
//$body = str_replace($word,$img, $body);
//这个是为了防止str_replace替换时出现乱码
$body = chn_str_replace($word,$img ,$body );
}
}
}
//echo $body;

这个是在织梦gbk编码下的代码。utf-8现在还在研究。欢迎大家常来访问php技术博客
本文链接:www.phpcainiao.com/cainiaophp/20121201/22.html

织梦gbk下文章随机文字转换为图片相关推荐

  1. 织梦主动提交_织梦实现发布文章主动推送(实时)给百度的方法

    织梦内容管理系统(DedeCms) 是一款很老的程序了,主要是以简单.实用.开源而闻名,很多建站初学者第一次做网站都是使用的织梦.不过织梦也有不足之处,比方说我们用织梦发布文章 织梦内容管理系统(De ...

  2. dede php低版本出现500错误,织梦后台生成文章提示500错误怎么办

    织梦后台生成文章提示500错误的解决办法:首先将"a"文件夹的权限设置成"写入":然后依次选择"IIS7.FastCGI设置":接着双击&q ...

  3. 织梦 dedecms 大批量文章sitemap生成方法

    织梦 dedecms 大量文章sitemap生成方法. 织梦后台 -[模板]-[全局标记测试] 输入如下代码,会获取所有文章链接. 点击下载代码(访问密码:1112) 输入如下代码,会获取所有tag链 ...

  4. 织梦主动提交_织梦CMS发表文章自动实现百度链接主动推送教程

    摘要:织梦CMS近几年都没有更新,但是很多初学者都还是在使用织梦,近期有站长咨询能金,织梦CMS如何实现发布新文章后自动提交链接到百度(百度链接提交中的主动推送方式)... 织梦CMS近几年都没有更新 ...

  5. 织梦主动提交_织梦CMS发布文章全自动实现百度链接主动推送教程

    原标题:织梦CMS发布文章全自动实现百度链接主动推送教程 织梦CMS近几年都没有更新,但是很多初学者都还是在使用织梦,近期有站长咨询冬镜,织梦CMS如何实现发布新文章后自动提交链接到百度(百度链接提交 ...

  6. 织梦批量获取文章链接

    织梦批量获取文章链接 自己做站上蜘蛛池获取文章链接,一个一个的点真的是太累了.查了好久发现织梦本身就有这个功能.去年教别人的时候,很快就找到了,今年自己用的时候找了好久,泪崩~~~所以将其写在博客中, ...

  7. 解决织梦(DedeCMS)系统自定义字段图片调用问题

    解决织梦(DedeCMS)系统自定义字段图片调用问题 2011-05-08 16:03:52|  分类: 技术相关 |  标签:自定义  字段  imgurl  调用  dtp   |举报 |字号 订 ...

  8. python图片转换成文字_Python输出汉字字库及将文字转换为图片的方法

    用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open() ...

  9. python字库转文字图片,Python输出汉字字库及将文字转换为图片

    用python输出汉字字库 问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open( ...

最新文章

  1. iOS App上架流程(2016详细版)
  2. [toolchains]-ARM ToolChains介绍
  3. office word中利用宏编程批量调节图片的亮度和对比度
  4. 计算机数媒专业优势,27所院校新开设数字媒体艺术专业,“数媒”专业为什么这么火?...
  5. mysql受影响的行 0_为什么更新/删除成功时受影响的行返回0?
  6. 我的一些学习经验:概述
  7. 实战-动手开发第一个区块链投票DAPP
  8. 字符串全排列 java实现
  9. SQL Server 事务隔离级别详解
  10. C++中使用sort函数给数组排序
  11. 第1章 数据库系统概论---数据库原理及应用
  12. mysql可视化界面数据导出_MySQL 使用可视化工具导出与导入数据
  13. 教资高中计算机知识点,如何备考教师资格证高中信息技术
  14. PHP 中移除微信emoji表情
  15. Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器
  16. 卡巴斯基免费版安装教程
  17. CTFmisc图像题(zsteg取zip、压缩包重组、IDAT数据隐写、Markdown编写LaTeX、零宽字节隐写)
  18. 手把手带你从0开始搭建个人网站,小白可懂的保姆级教程
  19. UITableView去掉Grouped样式的第一组Header组头
  20. 微信网址打开php,微信打开网址添加在浏览器中打开提示

热门文章

  1. 最简单的基于FFMPEG+SDL的音频播放器
  2. 最简单的基于FFmpeg的推流器(以推送RTMP为例)
  3. window脚本介绍
  4. mac安装brew(国内)
  5. 这可能是史上最详细的MES介绍
  6. [附源码]Python计算机毕业设计SSM流浪动物救助及领养平台(程序+LW)
  7. 网络 路由器基本协议配置
  8. [Practical.Vim(2012.9)].Drew.Neil.Tip02 学习摘要
  9. 钟薛高的贵,蜜雪冰城的“我爱你”,新消费品牌如何打造记忆点?
  10. 飞控中加速度计数据fft分析