>  기사  >  백엔드 개발  >  USB 인터페이스 유형은 향상된 UBB 클래스입니다.

USB 인터페이스 유형은 향상된 UBB 클래스입니다.

WBOY
WBOY원래의
2016-07-29 08:34:411681검색

/*
재인쇄가 있는 경우 저자를 표시해 주세요.
원저자: He Zhiqiang
개선: SonyMusic[ sonymusic@163.net ]
파일: ubb. php
비고: 개선되었다고 하는데, 사실 핵심 함수인 parse()가 완전히 재작성되었고, 아이디어도 다릅니다.
그러나 여전히 He Zhiqiang의 예에서 영감을 얻었으며 테스트 예제와 URLCHECK와 같은 여러 기능도 He Zhiqiang의 프로그램을 따릅니다.
아직 색상 기능은 없지만 추가하겠습니다.
프로그램에 버그나 불편한 점이 있으면 이메일로 알려주세요.
감사합니다!
개선된 기능:
이 클래스는 현재 다음과 같은 간단하고 실용적인 인코딩만 지원합니다.
[url] http://phpuser. ]
http:// 헤더는 필수가 아닙니다
예를 들어 [url]phpuser.com[/url]도 허용됩니다.
2. 이메일 링크
[이메일] sonymusic@163.net [/email]
3. 사진 링크
[img] http://www.phpchina.com/images/logo .gif [/img]
URL링크와 마찬가지로 이전 http는 선택사항입니다.
4. 텍스트
[b]굵은 글꼴[/b]
[i]기울임꼴[/i]
[u]밑줄[/u]
[h1] 제목 단어 아니요 . 1[/h1] ... [h6]제목 단어 6번[/h6]
[sup][/sup]
[sub][/sub]
[tt][/ tt ]
[s][/s]
[strike][/strike]
[em][/em]
[strong][/strong]
[code][/ code ]
[samp][/samp]
[kbd][/kbd]
[var][/var]
[dfn][/dfn]
[cite][/ cite ]
[small][/small]
[big][/big]
[blink][/blink]
다음 사항에 유의하세요.
1.
2. 태그에는 TAB 키가 허용되지 않지만 공백은 허용됩니다.
3. 이 클래스는 htmlencode, htmlencode4textarea, emailcheck 함수 및 urlcheck 클래스를 호출해야 합니다.
4. 수정 후 중첩은 지원되지만 url, email 및 img 태그의 중첩은 허용되지 않습니다.
기술 정보:
Ultimate 게시판
http://www.ultimatebb.com/
UBB 코드란
http://www.scriptkeeper.com/ubb/ubbcode.html
*/
include("urlcheck.php");
include("otherfunc.php"); //이 두 파일의 내용은 마지막에 첨부되어 있습니다.
//ubbcode 클래스
class ubbcode{
var $call_time=0
//처리 가능한 태그 및 처리 함수에 대한 해당 테이블
var $tags = array( //소문자 Tags= > ; 해당 처리 기능
'url' => '$this->url',
'email' => '$this->email',
'img' => $this->img',
'b' => '$this->간단함',
'i' => '$this->간단함',
' u' => '$this->간단함',
'tt' => '$this->간단함',
의' => '$this->간단함',
'스트라이크' => '$this->간단함',
'h1' => '$this->간단함',
'h2' => ',
'h3' => '$this->단순',
'h4' => '$this->단순',
'h5' => ->단순',
'h6' => '$this->단순',
'sup' => '$this->단순',
'sub' => ; '$this->단순',
'em' => '$this->단순',
'strong' => '$this->단순',
' 코드' => '$this->단순',
'samp' => '$this->단순',
'kbd' =>
'var' => '$this->단순',
'dfn' => '$this->단순',
'cite' => ;단순',
'작은' => '$this->단순',
'큰' => '$this->단순',
'깜박임' => $this->simple'
);
//url 연결 속성
var $attr_url
//url 적법성 검사 개체
var $urlcheck; attr_url){
$this->attr_url = ''.$attr_url;
$this->urlcheck = new urlcheck()
}
//$str UBB 인코딩 구문 분석 수행
함수 파싱($str){
$this->call_time;
$parse = ''.htmlencode($str);
$ret = '' >while(true ){
$eregi_ret=eregi("[[#]{0,1}[[:alnum:]]{1,7}]",$parse,$eregi_arr) //찾기[ xx]
if(!$eregi_ret){
$ret .= $parse;
break; //그렇지 않으면
}
$pos = @strpos ($parse,$ eregi_arr[0] );
$tag_len=strlen($eregi_arr[0])-2;//태그 길이
$tag_start=substr($eregi_arr[0],1,$tag_len)
$tag=strtolower ($tag_start);
if((($tag=="url") 또는 ($tag=="email") 또는 ($tag=="img")) 및 ($this- >call_time> 1)){
echo $this->call_time."
";
return $parse;//중첩할 수 없는 태그일 수 없으면 직접 반환
}
$parse2 = substr($parse,0,$pos);//태그 전
$parse = substr($parse,$pos $tag_len 2);//태그 후
if(!isset ($ this->tags[$tag])){
echo "$tag_start
"
$ret .= $parse2.'['.$tag_start.']'
계속; //지원되지 않는 태그인 경우
}
//해당 종료 태그 찾기
$eregi_ret=eregi("[/".$tag."]",$parse,$eregi_arr ); 🎜>if(!$eregi_ret){
$ret .= $parse2.'['.$tag_start.']'
continue;//해당 종료 태그가 없는 경우
}
$pos=strpos($parse,$eregi_arr[0]);
$value=substr($parse,0,$pos);//시작 태그와 끝 태그 사이의 내용입니다
$ tag_end =substr($parse,$pos 2,$tag_len);
$parse=substr($parse,$pos $tag_len 3);//종료 태그 뒤의 내용
if(($tag!= "url") 및 ($tag!="email") 및 ($tag!="img")){
$value=$this->parse($value)
}
$ret .= $parse2;
eval('$ret .= '.$this->tags[$tag].'("'.$tag_start.'","'.$tag_end.'", "'.$value.'");');
}
$this->call_time--
return $ret; end,$value){
return '<'.$start.'>'.$value.''
}
함수 URL( $start,$end,$value){
$trim_value=trim($value)
if (strtolower(substr($trim_value,0,7))!="http://")
$trim_value="http://".$trim_value;
if($this->urlcheck->check($trim_value)) return 'attr_url.'>'.$value.''
그렇지 않으면 '['.$start.']'.$value.'[/'.$end를 반환합니다. .']';
}
함수 email($start,$end,$value){
if(emailcheck($value)) return ''.$value.'';
그렇지 않으면 '['.$start.']'.$value.'[/'.$end.']'를 반환합니다.
}
function img($start,$end,$value){
$trim_value=trim($value)
if ((strtolower(substr($trim_value,0,7))! ="http://") 또는 ($this->urlcheck->check($trim_value)))
return '그렇지 않으면 '['.$start.']'.$value.'[/'.$end.']'를 반환합니다
}
}
//테스트
echo '';
echo 'Test'
echo '< ;';
echo '

'
echo '
';
echo '' ;
echo '
';
if(isset($ubb)){
$ubbcode = new ubbcode('target="_blank"')
echo '< ;'.$ubbcode->parse($ubb);
}
echo ''
echo '';
urlcheck.php 파일 내용:
//urlcheck.php
class urlcheck{
var $regex = array(//프로토콜 이름(꼭 작성해야 함) 여기서는 소문자) => 해당 정규식
'ftp' => '$this->ftpurl',
'file' => '$this->fileurl',
' http ' => '$this->httpurl',
'https' => '$this->httpurl',
'gopher' =>
'뉴스' => '$this->newsurl',
'nntp' => '$this->nntpurl',
'telnet' => ; telneturl',
'wais' => '$this->waisurl'
)
var $hialpha;
var $alpha; var $digit;
var $extra;
var $음표;
var $hex; $ escape;
var $uchar;
var $digits;
var $password; 사용자 ;
var $port;
var $alphadigit;
var $hostname; ;
var $hostport;
var $ftp
var $fsegment;
var $ftpurl; 🎜 >//file
var $fileurl;
//http,https
var $hsegment;
var $httpurl; > //gopher
var $gopher_string;
var $gtype;
var $gopherurl; 그룹 ;
var $grouppart;
var $newsurl;//nntp
var $nntpurl
var $telneturl; > var $wpath;
var $waisdoc;
var $waisdatabase; function check($url){
$pos = @strpos ($url,':',1)
if($pos<1) return false
$prot = substr($url, 0,$pos);
if(!isset($this->regex[$prot])) return false
eval('$regex = '.$this->regex[$prot] . ';');
return ereg('^'.$regex.'$',$url)
}
function urlcheck(){
$this->lowalpha = ' [ a-z]';
$this->hialpha = '[A-Z]';
$this->alpha = '('.$this->lowalpha.'|'.$this-> ; 히알파.')';
$this->digit = '[0-9]';
$this->safe =
$this- > ;extra = '[*()'!,]';
$this->national = '([{}|^~`]|[|])'
$this-> 구두점 = '[<>#%"]';
$this->reserved = '[?;/: @&= ]';
$this->hex = '('. $ this->digit.'|[a-fA-F])'
$this->escape = '(%'.$this->hex.'{2})';
$this->unreserved = '('.$this->alpha.'|'.$this->digit.'|'.$this->safe.'|'.$this- >추가.')';
$this->uchar = '('.$this->예약되지 않음.'|'.$this->escape.')';
$this->xchar = '('.$this->예약되지 않음.'|'.$this->예약됨.'|'.$this->escape.')';
$this->digits = '('.$this->digit.' )';
$this->urlpath = '('.$this->xchar.'*)';
$this->password = '(('.$this->uchar.'|[?;&=]'.')*)';
$this->user = '(('.$this->uchar.'|[?;&=]'.')*)';
$this->port = $this->digits;
$this->hostnumber = '('.$this->digits.'.'.$this->digits.'.'.$this->digits.'.'.$this- >숫자.')';
$this->alphadigit = '('.$this->alpha.'|'.$this->digit.')';
$this->toplabel = '('.$this->alpha.'|('.$this->alpha.'('.$this->alphadigit.'|-)*' .$this->영숫자.'))';
$this->domainlabel = '('.$this->alphadigit.'|('.$this->alphadigit.'('.$this->alphadigit.'|-)*' .$this->영숫자.'))';
$this->hostname = '(('.$this->domainlabel.'.)*'.$this->toplabel.')';
$this->host = '('.$this->호스트 이름.'|'.$this->호스트 번호.')';
$this->hostport = '('.$this->host.'(:'.$this->port.')?)';
$this->login = '(('.$this->user.'(:'.$this->password.')?@)?'.$this->hostport.' )';
$this->ftptype = '[aidAID]';
$this->fsegment = '(('.$this->uchar.'|[?: @&= ])*)';
$this->fpath = '('.$this->fsegment.'(/'.$this->fsegment.')*)';
$this->ftpurl = '([fF][tT][pP]://'.$this->login.'(/'.$this->fpath.'(;[tT ][yY][pP][eE]='.$this->ftptype.')?)?)';
$this->fileurl = '([fF][iI][lL][eE]://('.$this->host.'|[lL][oO][cC][aA ][lL][hH][oO][sS][tT])?/'.$this->fpath.')';
$this->search = '(('.$this->uchar.'|[;: @&= ])*)';
$this->hsegment = '(('.$this->uchar.'|[;: @&= ])*)';
$this->hpath = '('.$this->hsegment.'(/'.$this->hsegment.')*)';
$this->httpurl = '([hH][tT][tT][pP][sS]?://'.$this->hostport.'(/'.$this-> hpath.'([?]'.$this->search.')?)?)';
$this->gopher_string = '('.$this->xchar.'*)';
$this->selector = '('.$this->xchar.'*)';
$this->gtype = $this->xchar;
$this->gopherurl = '([gG][oO][pP][hH][eE][rR]://'.$this->hostport.'(/('.$this ->gtype.'('.$this->selector.'( '.$this->search.'( '.$this->gopher_string.')?)?)?)?)?) ';
$this->article = '(('.$this->uchar.'|[;/?:&=]) @'.$this- >host.')';
$this->group = '('.$this->alpha.'('.$this->alpha.'|'.$this->digit.'|[-. _] )*)';
$this->grouppart = '([*]|'.$this->group.'|'.$this->article.')';
$this->newsurl = '([nN][eE][wW][sS]:'.$this->grouppart.')';
$this->nntpurl = '([nN][nN][tT][pP]://'.$this->hostport.'/'.$this->group.'(/ '.$this->숫자.')?)';
$this->telneturl = '([tT][eE][lL][nN][eE][tT]://'.$this->login.'/?)';
$this->wpath = '('.$this->uchar.'*)';
$this->wtype = '('.$this->uchar.'*)';
$this->database = '('.$this->uchar.'*)';
$this->waisdoc = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'/' .$this->wtype.'/'.$this->wpath.')';
$this->waisindex = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'[? ]'$this->검색하세요.')';
$this->waisdatabase = '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.')' ;
$this->waisurl = '('.$this->waisdatabase.'|'.$this->waisindex.'|'.$this->waisdoc.')';
}
}
?>
文件otherfunc.php적 내용:
//otherfunc.php
function htmlencode($str){
$str = (string)$str;
$ret = '';
$len = strlen($str);
$nl = 거짓;
for($i=0;$i<$len;$i ){
$chr = $str[$i];
switch($chr){
case '<':
$ret .= '<';
$nl = 거짓;
휴식;
케이스 '>':
$ret .= '>';
$nl = 거짓;
휴식;
case '"':
$ret .= '"';
$nl = 거짓;
휴식;
case '&':
$ret .= '&';
$nl = 거짓;
휴식;
/*
case ' ':
$ret .= ' ';
$nl = 거짓;
휴식;
*/  
case chr(9):
$ret .= '    ';
$nl = 거짓;
휴식;
case chr(10):
if($nl) $nl = false;
else{
$ret .= '
';
$nl = 참;
}
휴식;
case chr(13):
if($nl) $nl = false;
else{
$ret .= '
';
$nl = 참;
}
휴식;
기본값:
$ret .= $chr;
$nl = 거짓;
휴식;
}
}
return $ret;
}
함수 htmlencode4textarea($str){
$str = (string)$str;
$ret = '';
$len = strlen($str);
for($i=0;$i<$len;$i ){
$chr = $str[$i];
switch($chr){
case '<':
$ret .= '<';
휴식;
케이스 '>':
$ret .= '>';
휴식;
case '"':
$ret .= '"';
휴식;
case '&':
$ret .= '&';
휴식;
케이스 ' ':
$ret .= ' ';
휴식;
case chr(9):
$ret .= '    ';
휴식;
기본값:
$ret .= $chr;
휴식;
}
}
return $ret;
}
emailcheck($email) 기능{
$ret=false;
if(strstr($email, '@' ) && strstr($email, '.')){
if(eregi("^([_a-z0-9] ([._a-z0- 9-] )*)@([a-z0-9]{2,}(.[a-z0-9-]{2,})*.[a-z]{2,3})$", $email )){
$ret=true;
}
}
return $ret;
}
function str2url($path){
return eregi_replace("/","/",urlencode($path));
}
?>

以上就介绍了usb接口类型 一个改进的UBB类, 包括了usb接口类型方了内容, 希望对PHP教程에는유효한유행이있습니다.

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