>  기사  >  CMS 튜토리얼  >  Dedecms 문자열 차단 기능을 사용하는 방법

Dedecms 문자열 차단 기능을 사용하는 방법

藏色散人
藏色散人원래의
2020-01-11 10:03:082141검색

Dedecms 문자열 차단 기능을 사용하는 방법

dedecms 문자열 차단 기능을 어떻게 사용하나요?

dedecms cn_substr_utf8 문자열 차단 함수 토론

추천 학습: Dreamweavercms

phpsir에서 본 이 글은 주로 dedecms의 cn_substr_utf8 함수에 대한 이야기입니다. 문제가 좀 있는 것 같은데, dedecms 공부하는 친구들은 읽어보시면 됩니다. 다음

dedecms의 cn_substr_utf8 함수는 다음과 같습니다.

코드는 다음과 같습니다.

/**
* utf-8中文截取,单字节截取模式
*
* @access public
* @param string $str 需要截取的字符串
* @param int $slen 截取的长度
* @param int $startdd 开始标记处
* @return string
*/
if ( ! function_exists('cn_substr_utf8'))
{
function cn_substr_utf8($str, $length, $start=0)
{
if(strlen($str) < $start+1)
{
return &#39;&#39;;
}
preg_match_all("/./su", $str, $ar);
$str = &#39;&#39;;
$tstr = &#39;&#39;;</p> <p> //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
for($i=0; isset($ar[0][$i]); $i++)
{
if(strlen($tstr) < $start)
{
$tstr .= $ar[0][$i];
}
else
{
if(strlen($str) < $length + strlen($ar[0][$i]) )
{
$str .= $ar[0][$i];
}
else
{
break;
}
}
}
return $str;
}
}

코드는 다음과 같습니다.

if(strlen($str) < $length + strlen($ar[0][$i]) )

한 줄을 가로채면 문자가 한 개 더 발생할 수 있으므로

로 변경하는 것을 고려해 보세요. 코드는 다음과 같습니다.

if(strlen($str) < $length + strlen($ar[0][$i]) -1 )

테스트 코드는 다음과 같습니다

코드는 다음과 같습니다

$f = "你好fasdfa你fasdf#e#";
$pos = strpos($f,'#e#');
var_dump($pos);
var_dump(cn_substr_utf8($f,$pos));
var_dump(cn_substr_utf82($f,$pos));

function cn_substr($str, $slen, $startdd=0) { global $cfg_soft_lang; if($cfg_soft_lang=='utf-8') { return cn_substr_utf8($str, $slen, $startdd); } $restr = ''; $c = ''; $str_len = strlen($str); if($str_len < $startdd+1) { return ''; } if($str_len < $startdd + $slen || $slen==0) { $slen = $str_len - $startdd; } $enddd = $startdd + $slen - 1; for($i=0;$i<$str_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd) { $restr .= $c; }

if(ord($str[$i])>0x80) { if($str_len>$i+1) { $c = $str[$i].$str[$i+1]; } $i++; } else { $c = $str[$i]; }

if($i >= $enddd) { if(strlen($restr)+strlen($c)>$slen) { break; } else { $restr .= $c; break; } } } return $restr; }

function cn_substr_utf8($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) {

$tstr .= $ar[0][$i]; } else {

if(strlen($str) < $length + strlen($ar[0][$i]) ) {

$str .= $ar[0][$i]; } else {

break; } } } return $str; }

function cn_substr_utf82($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar);

$str = ''; $tstr = '';

//为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) {

$tstr .= $ar[0][$i]; } else {

if(strlen($str) < $length + strlen($ar[0][$i]) -1 ) // phpsir 加了 -1 {

$str .= $ar[0][$i]; } else {

break; } } } return $str; }

위 내용은 Dedecms 문자열 차단 기능을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.