WordPress從3.30版本開(kāi)始,有了官方的文字階段函數(shù),我們自動(dòng)截取文字作為摘要時(shí)再也不用添加自定義文字截?cái)嗪瘮?shù)到主題中了,對(duì)于一般的主題來(lái)說(shuō),這個(gè)函數(shù)提供了很大的方便,可是遇到網(wǎng)站中同時(shí)有中英文內(nèi)容時(shí),這個(gè)功能用起來(lái)就有點(diǎn)不順利了。
這要先從中英文的區(qū)別說(shuō)起,語(yǔ)言的最小單位是字符,在中國(guó)語(yǔ)言中,一個(gè)字(相當(dāng)于英語(yǔ)的字母)就能表達(dá)一個(gè)完整的意思(很簡(jiǎn)潔很強(qiáng)大有木有?),而英文中,一個(gè)字母表達(dá)一個(gè)完整意思的情況很少(除了 a,I 這些極個(gè)別的),要表達(dá)一個(gè)完整的意思,絕大多數(shù)時(shí)候,英語(yǔ)都要用由幾個(gè)字母組成的單詞(真夠麻煩的,怪不得這么多人不喜歡學(xué)英語(yǔ))。
從程序分詞角度來(lái)說(shuō),英文分詞是以空格作為分詞邊界的,而中文分詞是以 \u 這樣的 UTF-8字符標(biāo)記作為邊界的。在字?jǐn)?shù)統(tǒng)計(jì)上,中文一個(gè)字符就是一個(gè)字,而英語(yǔ)一個(gè)單詞才能算一個(gè)字。
我們來(lái)看一下wp_trim_words的參數(shù):
wp_trim_words( $text, $num_words = 55, $more = null );
注意其中第二個(gè)參數(shù):$num_words,這個(gè)參數(shù)是需要截?cái)嗟?strong>字?jǐn)?shù),就拿「Hello wonderful world」和「你好世界」來(lái)說(shuō)吧,看一下下面的例子。
$text1 = "Hello wonderful world";
$text2 = "你好世界";
wp_trim_words( $text1, 2, $more = null ); //輸出的結(jié)果是:Hello wonderful
wp_trim_words( $text2, 2, $more = null ); //輸出的結(jié)果是:你好
看到這里,今天要說(shuō)的問(wèn)題就出現(xiàn)了,同樣截取兩個(gè)字,輸出的內(nèi)容長(zhǎng)度相差的卻有點(diǎn)遠(yuǎn), 大家知道,網(wǎng)頁(yè)排版關(guān)鍵是對(duì)齊,這還只是截取了兩個(gè)字,放到正常的主題制作中,需要截取幾十個(gè)字的時(shí)候,結(jié)果可想而知。
怎么解決這個(gè)問(wèn)題?我的辦法是用mb_strimwidth函數(shù)代替,這貨直接是按照字符數(shù)截取的,不管你是英語(yǔ)漢語(yǔ)還是火星語(yǔ),它都一視同仁,完全不考慮這些字符所表達(dá)的意思,雖然沒(méi)有wp_trim_words處理得智能,卻能實(shí)實(shí)在在的解決這里出現(xiàn)的問(wèn)題。
所以:任何函數(shù)都有存在的意義,都是為了解決相應(yīng)場(chǎng)景里出現(xiàn)的問(wèn)題而存在的,我們使用起來(lái),要一視同仁,能解決問(wèn)題的函數(shù)就是好函數(shù)。
