麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
一道面试题,大家讨论一下!
悬赏分:20 - 2007年06月06日

这道题是我去面试时经理给我做的机试题,我现在已经获聘,但答卷还有些问题没有完成,有兴趣的讨论一下: 题目:编写一个字串处理类,功能要求如下 1 查出指定字串(一个或多个,下同)是否在文中出现,并返回出现次数 2 指定字词高亮显示 3 过滤指定字词(替换成指定字符,如***) 4 去除文中的不安全的HTM标记,但保留指定的单字标志(如:b,i,u等) 5 文中的URL转为可点击(指定哉才可点,其它出掉) 6 UBBCode解析 7 为该类编写testcase 我的答案如下: [php] <?php /** 文件名 : strparse.php 功能 : 字符串处理 作者 : tim 联系 : timwhoung@126.com 完成日期: 2004-11-24 */ class strparse { var $words; //指定字词出现次数统计结果 var $str; //处理内容,为一字串 //构造 function strparse($str){ $this->str=$str; } /** 功能:返回指定字串的统计结果,为一数组(键名为要查的词,值为出现次数) 参数:传入参数为一数组,保存要统计的字串 */ function getWords($wordsArr){ return $this->words; } //设置要处理的字串 function setStr($str){ $this->str=$str; } //获取处理后内容 function getStr(){ return nl2br($this->str); } /** 功能:统计指定字串出现次数 参数urlArr要统计的字串数组 */ function countWords($keywordArr){ if(is_array($keywordArr)){ foreach($keywordArr as $k=>$v){ $this->words[$v]=substr_count($this->str,$v); } } return $this->words; } /** 功能:高亮指定关键字 参数hightArr高亮关键字数组,$s_code和$e_code为高亮处理方式 */ function setH($hightArr,$s_code="",$e_code=""){ if(is_array($hightArr)){ foreach($hightArr as $k=>$v){ $this->str=str_replace($v,$s_code.$v.$e_code,$this->str); } } } /** 功能:过滤指定关键字 参数filterArr高亮关键字数组,$mask替代字串 */ function filter($filterArr,$mask="***"){ if(is_array($filterArr)){ foreach($filterArr as $k=>$v) $f="/".$v."/A";//对每个关键字添加定界符及模式修正符A } $this->str=preg_replace($f,$mask,$this->str); } /** 功能:去除不安全的HTML字符 参数tag要保留的标记 */ function htmlClean($tag=""){ $this->str=strip_tags($this->str,$tag); } /** 功能:自动转换指定链接,并去除多余项 参数urlArr要转换的url数组 */ function urlClean($urlArr){ //保护保留URL if(is_array($urlArr)){ foreach($urlArr as $k=>$v){ $this->str=str_replace($v,"[url]".($k)."[/url]",$this->str); if(substr($v,0,7)!="http://") $v="http://".$v; $url[$k]=$v; } } //保护UBB的[IMG]和[URL]中的URL preg_match_all("/\[img(=left|=right)?\](.+?)\[\/img\]/is",$this->str,$result); foreach($result[0] as $k=>$v){ $this->str=str_replace($v,"ubbimg".$k,$this->str); $ubbimg[$k]=$v; } preg_match_all("/\[url=(.+?)\](.+?)\[\/img\]/is",$this->str,$result); foreach($result[0] as $k=>$v){ $this->str=str_replace($v,"ubburl".$k,$this->str); $ubburl[$k]=$v; } //去掉其它URL $this->str=eregi_replace("(http:\/\/)?(www\.)?([0-9a-zA-Z_\-\.]{2,})?\.(com|net|org|cn|gov)","",$this->str); //恢复保留URL if(is_array($url)){ foreach($url as $k=>$v){ $this->str=str_replace("[url]".$k."[/url]","".$v."",$this->str); } } //还原ubb编码的url if(is_array($ubburl)){ foreach($ubburl as $k=>$v){ $this->str=str_replace("ubburl".$k,$v,$this->str); } } if(is_array($ubbimg)){ foreach($ubbimg as $k=>$v){ $this->str=str_replace("ubbimg".$k,$v,$this->str); } } } /** *功能:UBB编码 */ function BBCODE(){ $this->str=str_replace(" "," ",$this->str); $this->str=preg_replace("/\\t/is"," ",$this->str); $this->str=preg_replace("/\(.+?)\[\/color\]/is","\\2",$this->str); $this->str=preg_replace("/\[url=(http:\/\/.+?)\](.+?)\[\/url\]/is","\\2",$this->str); $this->str=preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is","\\2",$this->str); $this->str=preg_replace("/\[img(=left|=right)?\](.+?)\[\/img\]/is","screen.width-300)this.width=screen.width-300\" title=\"按此在新窗口浏览图片\">",$this->str); $this->str=preg_replace("/\[i\](.+?)\[\/i\]/is","\\1",$this->str); $this->str=preg_replace("/\[u\](.+?)\[\/u\]/is","\\1",$this->str); $this->str=preg_replace("/\[b\](.+?)\[\/b\]/is","\\1",$this->str); $this->str=preg_replace("/\[wmv\](.+?)\s*\[\/wmv\]/is","",$this->str); $this->str=preg_replace("/\[wma\](.+?)\s*\[\/wma\]/is","",$this->str); $this->str=preg_replace("/\[mp3\](.+?)\s*\[\/mp3\]/is",'',$this->str); $this->str=preg_replace("/\[swf\](.+?)\s*\[\/swf\]/is","[在新窗口中查看该Flash]
",$this->str); $this->str=preg_replace("/\[quote\](.+?)\[\/quote\]/is","
 引用:
\\1

", $this->str); $this->str=preg_replace("/\[code\]\s*(.*?)\s*\[\/code\]/is","
 CODE:
\\1

", $this->str); } } ?> [/php] testcase.php(该例子经主考官修改) [php] <?php //字串处理类测试例子 require_once("strparse.php"); $ss=<<原文地址 替换会出现乱码, 看不太适合中文替换!~~ 内文还有哦~~(jason@gz.dayoo.com2004/11/25 11:27) 广东姑娘朱云屎珊艳压群芳,夺得全国首届车模大赛冠军。记者纪粤鸣摄   本报讯 (记者周方通讯员穗宣)昨日上午,第二届中国(广州)国际汽车展览会在广州国际会展中心隆重开幕。全国政协常委、中国汽车工程学会名誉理事长邵奇惠,广东省委常委、广州市委书记、市人大常委会主任林树森,广州市委副书记、市长张广宁,市委常委、常务副市长林元和,副市长陈明德及省、市有关部门领导,部分外国驻穗总领事等出席了开幕仪式。3万多观众首日到场一睹华南最大规模国际车展的风采。   问广本机器人和市领导握手   开幕式后,领导和嘉宾参观了部分展馆。邵奇惠、林树森和张广宁等参观了丰田旗下的雷克萨斯、皇冠、佳美等新款车型及概念车。林树森鼓励广州丰田的负责人说,丰田有强势的品牌和产品,这为广州丰田将来的发展奠定了非常好的基础,希望广州丰田早日做强做大。   林树森一行迈入广州本田展问区,一个外形可爱的银白色机器人缓缓走上展台用中文向观众问好;这个名为ASIMO的本田机器人引起了大家的兴趣,林树森向它招了招手,ASIMO立即迈着轻盈的步伐走到林树森面前,伸出右手和林树森握手,然后就随着现场音乐跳起了迪斯科,憨态可掬的样子逗得大家笑声不断。林树森等参观了最新发布的05款奥德赛商用车和本田雅阁混合动力车,并对广州本田给予了充分的肯定,他勉励广州本田不断推出新品,更加环保、节能、安全。随后,邵奇惠、林树森和张广宁等还参观了东风日产、上海通用、奔驰、一汽、比亚迪等整车厂商及部分零部件厂商的展台。 <<车展画册>>, <<城市画报>>   2010年实施欧洲三号排放标准   在谈到对本届车展的感受时,张广宁表示“这一届比上一届有很大进步”:第一,今年的参展企业近300家,比去年多近100家,参展面积也比去年大;第二,发布的新款车型达10多种,比去年多;第三,展示的概念车和高档车比去年多。张广宁表示,广州车展将朝国际一流水平目标迈进,并形成自己的特色。   张广宁还表示,广州原计划在今年推行欧洲二号汽车尾气排放标准,需要国家有关部门的支持,但可以肯定的是,广州在2010年将实施欧洲三号排放标准。在谈到广州汽车工业人才的储备是否足以支撑三大日系厂商的发展时,张广宁说,广州已经培养了大量的汽车人才,今后会面向全国乃至全世界吸引这方面人才。   广东http://www.gd.gov姑娘车模大赛封后 << 后面无晒~~ (jason@2004/11/25 11:27)   本报讯 (记者苏蕾)昨晚,第二届中国(广州)国际汽车展开幕晚会暨首届全国汽车模特大赛总决赛在广州天河体育场举行,广州市委副书记、市长张广宁,副市长陈明德等领导出席了活动。来自全国各地的45位模特选手同台竞艳,经过商务车、越野车、经济型轿车、豪华车等数个环节的互动展示与比拼,最后,来自广东的8号选手朱云珊、来自陕西的37号选手鹿娟和来自辽宁的41号选手高思分别获得首届全国汽车模特大赛的冠、亚、季军。(来源:大洋网http://www.dayoo.com) EOD; $str=new strparse($ss);//初始化 $str->htmlClean();//去掉HTML标记,只保留单字标记 $words=array("广州","车模","本田");//要统计的词语 print_r($str->countWords($words));//输出统计结果 echo("
"); $hight=array("本田","张广宁");//要高亮显示的词 $str->setH($hight); $filter=array("屎","朱云珊","本报讯");//要过滤的词 $str->filter($filter); /* jason@2004/11/25 11:45 好像去了一个gz.dayoo.com, 但有一个图片的gz.dayoo.com却无去?! 应该可以:指定dayoo.com, 那么其子域的也可以保留. */ $url=array("http://www.dayoo.com");//要去掉的URL $str->urlClean($url);//去掉非指定的URL $str->BBCODE(); echo($str->getStr()); ?>[/php] 存在的问题: 1 在替换过滤中文文字时,某些词会出现乱码,后来我加上了模式修正符A解决了该问题,不知道为什么会这样? 2 某些安全的HTM标记(如注释,书名号<<>>)也会被去掉,目前我的想法也是先将这些标记保护起来(替换成非HTM),处理完后才还原 3 保留和去除URL的问题,自已认为效率较低,而且还不完善 请大家对以上程序和想法,各抒己见!

提问者:太阳雨   06-06 04:04
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
36 + 67 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM