掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在我們一個(gè)網(wǎng)站建設(shè)項(xiàng)目中通常需要進(jìn)行一些文字長(zhǎng)度的限制,這就是我們常說的字符串截取。比如說一段文章的摘要,在A頁(yè)面可能是顯示的200個(gè)字,在B頁(yè)面可以只需要100個(gè)字。如果我們?yōu)榱诉@個(gè)差異而去做幾次程序的功能,那顯然有點(diǎn)吃虧或者不劃算。因此我們通常采取的方式都是把摘要信息存入一個(gè)變量中,當(dāng)然包含的字符數(shù)量通常是我們需要應(yīng)用的最大數(shù)量。
比如下面是兩種不同的列表方式,而其中的摘要部分就是Discuz的摘要,上面的是輸出所有的字?jǐn)?shù),而后面一部分是截取一部分輸出(因?yàn)槿绻竺婺莻€(gè)也輸出全部的話顯然不夠美觀。)
那么這個(gè)時(shí)候問題來了,究竟該如何來截取這個(gè)字符串才能更加符合我們的要求。如果同時(shí)了解前端和后端開發(fā)的朋友會(huì)有以下解決方案:通過CSS和PHP的任何一種來解決。
首先來說CSS,我們知道CSS完全也可以實(shí)現(xiàn)截取的字符串的目的,那那實(shí)際上不算作截取,只能算是“隱藏”多余的部分,而在上面兩張圖片的下面一張中,我們發(fā)現(xiàn)我們?cè)谔幚淼臅r(shí)候故意在三行文字的最后一行不充滿,如果是CSS就不能這樣,只能是充滿狀態(tài)。除此之外,有時(shí)候用CSS來“隱藏”會(huì)不太好操作。
再來聊聊PHP操作,我們知道不管是JS也好,還是PHP也好,甚至是其他的諸如java等語言。都有系統(tǒng)內(nèi)置的很多方法,而其中也必定包括了截取字符串的方法。
可能大家一開始就會(huì)想到的是substr,當(dāng)然也是我們經(jīng)常用到的。但在這里就有一個(gè)問題,因?yàn)榫幋a的問題會(huì)導(dǎo)致輸出亂碼,有朋友說我會(huì)處理這個(gè)問題,對(duì)!沒錯(cuò)可以處理,但是作為官方認(rèn)證的開發(fā)者肯定不要忘記DZ的規(guī)范,不能在前臺(tái)模版文件中寫入過多的PHP代碼,特別執(zhí)行一些功能的。簡(jiǎn)而言之,就是你處理了,可能就不符合Discuz二次開發(fā)規(guī)范了。
接著就會(huì)想到了mb_substr了,這個(gè)方法很多人也熟悉,而且我發(fā)現(xiàn)很多Wordpress模版中就使用到它,當(dāng)然似乎是WordPress進(jìn)行加工后的這個(gè)函數(shù)。mb_substr相對(duì)substr多了一個(gè)編碼識(shí)別,但是可能有的用戶的服務(wù)器都沒打開php_mbstring.dll(當(dāng)然我們的打開了)。
然后看到了Discuz在論壇首頁(yè)模版文件discuz.htm中有截取板塊最新發(fā)布文章的標(biāo)題,而使用到的函數(shù)就是cutstr,而這個(gè)其實(shí)就是Discuz內(nèi)置的一個(gè)方法。因此綜合起來說,在Discuz中直接用這個(gè)是靠譜的,當(dāng)然我也在網(wǎng)上看到一些朋友說,其實(shí)DZ的這個(gè)函數(shù)也有BUG。但對(duì)于基于Discuz來做二次開發(fā),我想這已經(jīng)不是什么問題了。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流