Heim >Backend-Entwicklung >PHP-Tutorial >求助phpcms 批量提取内容到描述 乱码

求助phpcms 批量提取内容到描述 乱码

WBOY
WBOYOriginal
2016-06-23 14:18:44936Durchsuche

php phpcms 截取 乱码

PHPCMS 官方论坛人气不高,特求助CSDN的各位大神们。下面代码是想要批量提取内容表中的内容到描述字段中,并过滤字符和截取字数。

但是运行文件后,数据库description字段全是?  代码如下:


<?phpini_set('default_charset','UTF-8');	//思路:当文章摘要没有时,截取并过滤文章内容前100字或更多为摘要,文件的作用就是批量提取	set_time_limit(7200);//(根据情况)  7200意思是页面执行时间最长为2个小时,如果数据量很大时建议设置更大些。	$H_char = 'utf-8';//(必须修改)  目前是GBK编码,如果您用的是PHPCMS UTF-8编码就改成:utf-8	$conn=mysql_connect('localhost','root','root123');//(必须修改)  连接数据('localhost','用户名','密码')	if (!$conn){ exit("Connection Failed: " . $conn);}	mysql_select_db("shujuku");//(必须修改)  改成你自已的数据库	mysql_query("SET NAMES '$H_char'");	$H_resut = mysql_query("SELECT id FROM v9_news where catid in(12,13,14,15,16,17)");//(必须修改)  1、1212y_content改成你自已的内容数据表。2、catid in(这里填写的是你要修改的栏目id,为什么填写栏目id?因为你所想要修改的信息都是属于这些栏目,如果单独只修改某一个栏目的信息就这么写:catid=栏目id   )。	while($H_array = mysql_fetch_array($H_resut)){		$H_tary = mysql_fetch_array(mysql_query("SELECT content FROM v9_news_data where id='".$H_array["id"]."'"));//(必须修改) 1212y_c_case改成你自已的文章模型		mysql_query("update v9_news set description='".H_subs(H_preg_repe($H_tary["content"]),0,300,'N')."' where id='".$H_array["id"]."'");//(必须修改)  1212y_content改成你自已的内容数据表,300就是要提取的字节(知识点:一个汉字为2个字节,300就是提取150个汉字)	}	mysql_close($conn);	function H_subs($H_str,$H_start,$H_len,$H_flag='N'){				$H_tmep = "";		$H_str_len = strlen($H_str);		if($H_len < 1) return "";		$H_start = $H_start == 0 ? $H_start : (ord(substr($H_str, $H_start+1, 1)) > 0xa0 ? $H_start+1 : $H_start);		for($i = $H_start; $i < $H_str_len; $i++){			if($i >= ($H_start+$H_len)) break;			$H_size = ord(substr($H_str, $i, 1)) > 0xa0 ? 3 : 1;			$H_tmep .= substr($H_str, $i, $H_size);			$i += $H_size > 1 ? 1 : 0;		}		if(($H_flag == "Y" && $H_start+$H_len < $H_str_len) || $H_flag == "YY"){$H_tmep.="...";}		return $H_tmep;	}	function H_preg_repe($H_str){				$H_searh = array ("'<script[^>]*?>.*?</script>'si",  		                 "'<[\/\!]*?[^<>]*?>'si",           			                 "'([\r\n])[\s]+'",                 			                 "'&(quot|#34);'i",                 			                 "'&(amp|#38);'i",		                 "'&(lt|#60);'i",		                 "'&(gt|#62);'i",		                 "'&(nbsp|#160);'i",		                 "'&(iexcl|#161);'i",		                 "'&(cent|#162);'i",		                 "'&(pound|#163);'i",		                 "'&(copy|#169);'i",		                 "'&#(\d+);'e");                    			$H_reple = array ("",		                  "",		                  "\\1",		                  "\"",		                  "&",		                  "<",		                  ">",		                  " ",		                  chr(161),		                  chr(162),		                  chr(163),		                  chr(169),		                  "chr(\\1)");		return trim(addslashes(nl2br(stripslashes(preg_replace($H_searh,$H_reple,$H_str)))));	}	echo "批量添加摘要成功";?>


回复讨论(解决方案)

$H_char = 'utf-8'; //这个错了,mysql 的开发者最初在书写代码时漏写了一个“-”,导致这个问题一直延续到今天
$H_char = 'utf8';

MySQL 中 utf-8 需写作 utf8

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn