首頁 > 後端開發 > php教程 > php實習tips(如何產生簡單摘要)

php實習tips(如何產生簡單摘要)

WBOY
發布: 2016-07-29 08:50:51
原創
1068 人瀏覽過

產生摘要

最近需要加一個需求,有一個send_article的接口,需要從html代碼裡提取出來中文字符,變成摘要,先後試了很多方法,比如:

<code><span>//匹配中文utf8编码</span><span><span>function</span><span>utf8_summary</span><span>(<span>$article</span>)</span> {</span><span>$match</span> = <span>"/^[\x{4e00}-\x{9fa5}]+$/u"</span>;<span>//正则表达式,匹配中文</span>
    preg_match_all(<span>$match</span>,<span>$article</span>,<span>$temp</span>);
    <span>$summary</span> = <span>""</span>;
    <span>foreach</span> (<span>$temp</span><span>as</span><span>$key</span> => <span>$value</span>) {
        <span>$sum</span> = implode(<span>''</span> , <span>$value</span>);
        <span>$summary</span> = <span>$sumary</span> . <span>$sum</span>;
    }<span>//将中文拼接起来</span><span>return</span><span>$summary</span>;
}
</code>
登入後複製

問題為:
1.當出現連續的中文時,會出現無法取出的情況
2.當出現中文與字元混排時,此方法有效
原因:
可能當純中文時,會使編碼改變為其他的,所以正則表達式無法匹配,但是當出現有中文與字符混排時,字符編碼為utf8,所以可以匹配,其實客戶端可以將中文包裹在標籤裡,並加入head頭,使用setchars=utf8來指明,但是客戶端的實體類別已經寫好,改動太麻煩,只有後台想辦法,於是嘗試了第二個辦法:

<code><span>$function</span> url_summary(<span>$article</span>) {
    <span>$article</span> = urlencode();
    <span>$match</span> = <span>"/^%[a-zA-Z0-9]{2}/"</span>;
    preg_match_all(<span>$match</span>,<span>$article</span>,<span>$temp</span>);
    <span>$summary</span> = <span>""</span>;
    <span>foreach</span> (<span>$temp</span><span>as</span><span>$key</span> => <span>$value</span>) {
        <span>$sum</span> = implode(<span>''</span> , <span>$value</span>);
        <span>$summary</span> = <span>$sumary</span> . <span>$sum</span>;    
    }
<span>$summary</span> = decode(<span>$summary</span>);
<span>return</span><span>$summary</span>;
}</code>
登入後複製

該方法的思路是:觀察到當非字母與數字經過url編碼以後,會變成類似%e7的字串,所以是取出這些,再把這些字串拼接起來,在解碼,會得到中文。

後來發現:其實是一個函數的事兒

發現有一個函數,可以改變編碼

<code><span>iconv(<span>"gbk"</span>,<span>"utf-8"</span>,<span>"php中文转码"</span>)</span>;<span>//把中文gbk编码转为utf8</span><span>iconv(<span>"utf-8"</span>,<span>"gbk"</span>,<span>"php中文转码"</span>)</span>;<span>//把中文utf8编码转为gbk</span></code>
登入後複製

但是該函數,要使用的話,需要到php.ini檔案中去把extension=php_iconv.dll這一項打開,並且安裝iconv函數庫才可以使用
,比較麻煩。
最後發現,使用strip_tags()函數可以解決
此函數可以移除html標籤,然後截取一段即可,
mb_substr(summary,0,50);//截取一段字元  
且需要移除轉義字符,如 ;  
str_replace(’ ’,‘’,
即可產生摘要,後期可以加入更多功能,例如斷句,換行;

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); }); 以上就介紹了php實習tips(如何產生簡單摘要),包含了tips,php方面的內容,希望對PHP教學有興趣的朋友有幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板