织梦gbk下文章随机文字转换为图片

最近做了一个功能就是在织梦里把文章内容的某些字随机替换成图片,据说是为了防采集。好了直接上代码。
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值