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