织梦gbk下文章随机文字转换为图片
生活随笔
收集整理的這篇文章主要介紹了
织梦gbk下文章随机文字转换为图片
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近做了一個功能就是在織夢里把文章內(nèi)容的某些字隨機替換成圖片,據(jù)說是為了防采集。好了直接上代碼。
1、在根目錄下dede文件夾templets下的模板文件article_add.htm里面加上默認選中的復(fù)選框。<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);
}
}
//生成圖片函數(shù)
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函數(shù)替換中文時出現(xiàn)亂碼
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循環(huán)結(jié)束。先計算需要轉(zhuǎn)換的字數(shù),然后把需要轉(zhuǎn)換的字放入數(shù)組打亂順序,比如需要轉(zhuǎn)換的字數(shù)是23,那就是在打亂順序之后的數(shù)組中取出前23個字轉(zhuǎn)換為圖片。大家可以在下面打印出來看一下
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("“",'',$tmp_body);
$tmp_body = str_replace("”",'',$tmp_body);
$tmp_body = str_replace("·",'',$tmp_body);
$tmp_body = str_replace("—",'',$tmp_body);
$tmp_body = str_replace("‘",'',$tmp_body);
$tmp_body = str_replace("’",'',$tmp_body);
$tmp_body = str_replace($kws, '', $tmp_body);//暫時屏蔽自動替換關(guān)鍵詞
if( strpos($_filter, ',') !== false ) $_filters = explode(',', $_filter);
else $_filters = $_filter;
$tmp_body = str_replace($_filters, '', $tmp_body);//暫時屏蔽保護關(guān)鍵詞
preg_match_all($regex_utf, iconv('gbk', 'utf-8',$tmp_body), $result);
$zhs = array_unique(ikonv('utf-8', 'gbk', $result[0]));
//把數(shù)組也就是內(nèi)容打亂順序重新排列,因為如果不打亂的話只能把該段文字的前多少位轉(zhuǎn)換為圖片。打亂之后就是整篇文章中隨意替換了
shuffle($zhs);
$zh_count = count($zhs);
$the_time = $zh_count/(strlen((string)$zh_count)*$_rate);
//需要轉(zhuǎn)換的文字次數(shù)
$the_time = floor($the_time) < 1 ? 1 : floor($the_time);
//print_r($zhs);
//echo floor($the_time);
//循環(huán)轉(zhuǎn)換圖片
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替換時出現(xiàn)亂碼
$body = chn_str_replace($word,$img ,$body );
}
}
}
//echo $body;
這個是在織夢gbk編碼下的代碼。utf-8現(xiàn)在還在研究。歡迎大家常來訪問php技術(shù)博客
本文鏈接:www.phpcainiao.com/cainiaophp/20121201/22.html
1、在根目錄下dede文件夾templets下的模板文件article_add.htm里面加上默認選中的復(fù)選框。<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);
}
}
//生成圖片函數(shù)
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函數(shù)替換中文時出現(xiàn)亂碼
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循環(huán)結(jié)束。先計算需要轉(zhuǎn)換的字數(shù),然后把需要轉(zhuǎn)換的字放入數(shù)組打亂順序,比如需要轉(zhuǎn)換的字數(shù)是23,那就是在打亂順序之后的數(shù)組中取出前23個字轉(zhuǎn)換為圖片。大家可以在下面打印出來看一下
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("“",'',$tmp_body);
$tmp_body = str_replace("”",'',$tmp_body);
$tmp_body = str_replace("·",'',$tmp_body);
$tmp_body = str_replace("—",'',$tmp_body);
$tmp_body = str_replace("‘",'',$tmp_body);
$tmp_body = str_replace("’",'',$tmp_body);
$tmp_body = str_replace($kws, '', $tmp_body);//暫時屏蔽自動替換關(guān)鍵詞
if( strpos($_filter, ',') !== false ) $_filters = explode(',', $_filter);
else $_filters = $_filter;
$tmp_body = str_replace($_filters, '', $tmp_body);//暫時屏蔽保護關(guān)鍵詞
preg_match_all($regex_utf, iconv('gbk', 'utf-8',$tmp_body), $result);
$zhs = array_unique(ikonv('utf-8', 'gbk', $result[0]));
//把數(shù)組也就是內(nèi)容打亂順序重新排列,因為如果不打亂的話只能把該段文字的前多少位轉(zhuǎn)換為圖片。打亂之后就是整篇文章中隨意替換了
shuffle($zhs);
$zh_count = count($zhs);
$the_time = $zh_count/(strlen((string)$zh_count)*$_rate);
//需要轉(zhuǎn)換的文字次數(shù)
$the_time = floor($the_time) < 1 ? 1 : floor($the_time);
//print_r($zhs);
//echo floor($the_time);
//循環(huán)轉(zhuǎn)換圖片
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替換時出現(xiàn)亂碼
$body = chn_str_replace($word,$img ,$body );
}
}
}
//echo $body;
這個是在織夢gbk編碼下的代碼。utf-8現(xiàn)在還在研究。歡迎大家常來訪問php技術(shù)博客
本文鏈接:www.phpcainiao.com/cainiaophp/20121201/22.html
總結(jié)
以上是生活随笔為你收集整理的织梦gbk下文章随机文字转换为图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《从你的全世界路过》
- 下一篇: 《从你的全世界路过》之稻城