にゃあ

より正確な文字数カウント関数(再考)

以前、このサイトで「より正確な文字数カウント関数」について採り上げましたが、それについて少し再考してみました。

まず初めにコードから明示しておきます。

<?php
/* $strはHTMLソースです */
function myStrlen($str){

        // HTMLタグを削除
        $str = strip_tags($str);
        // 改行を削除
        $str = preg_replace("/(\015\012)|(\015)|(\012)/", "", $str);
        // 連続する半角スペースを半角スペース1としてカウント
        $str = preg_replace('!\s+!', " ", $str);
        // HTML特殊文字を半角1文字としてカウント
        $str = preg_replace("/&[a-zA-Z]{1,5};/", " ", $str);
        // Unicode10進文字を半角1文字としてカウント
        $str = preg_replace("/&#[0-9]{1,5};/", " ", $str);
        // PHPマルチバイト対応
        if( function_exists('mb_strlen') ){
                $result = mb_strlen($str);
        }else{
                $result = strlen($str);
        }

        return $result;
}

以前のコードと比較して、追加された処理があります。それは改行文字を取り除く処理と連続した半角スペースをひとつの半角スペースとみなす処理です。

PHPのstrlen()やmb_strlen()は¥nなどのメタ文字も1文字としてカウントします。しかし、人間が実際見たとき、改行を1文字として認識するでしょうか?人間の「文字」の概念には改行というものはないでしょう。そこで、今回は改行をカウントしないような処理を加えたのです。

また連続した半角スペースをひとつの半角スペースとしてみなす処理は、文字列がHTML文書のときにこそ意味を発揮します。HTMLを書いたことがある人なら判ると思いますが、ソースに半角スペースをいくら連続して書いても、それはひとつの半角スペースにしかなりません。より現実的な文字カウントをするために、連続した半角スペースはひとつの半角スペースに置換することにしました。


コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/275

コメントを書く

お名前* URL
本文*
合い言葉* ←「4625rceer」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

コメントはないです。誰かコメント書いてよぅ…。

Author

Submenu

Recent Entries

XOOPS Cube Dev Ring

氷川 XOOPS Module 開発室

Recent Comments

Recent Trackbacks