PHP 中国語単語分割ソース コードで発生した小さな問題

WBOY
リリース: 2016-06-23 14:00:22
オリジナル
1017 人が閲覧しました

define('_SP_', chr(0xFF).chr(0xFE)); define('UCS2', 'ucs-2be');
ログイン後にコピー

これら 2 つの定数定義の機能は何ですか? chr(0xFF).chr(0xFE) として定義されている _SP_ は、ASCII 比較表で FF と FE の対応するコードがまったく見つかりませんが、これは何を意味しますか?
以下のコードは次のとおりです
        //载入副词典        $hw = '';        $ds = file($dicAddon);//17行的txt格式字典文件        foreach($ds as $d)        {            $d = trim($d);            if($d=='') continue;            $estr = substr($d, 1, 1);            if( $estr==':' ) {                $hw = substr($d, 0, 1);            }            else            {                $spstr = _SP_;                $spstr = iconv(UCS2, 'utf-8', $spstr);//怎么会出现ucs2编码?咋回事                $ws = explode(',', $d);//每一行的汉字,用中间的逗号分成数组                $wall = iconv('utf-8', UCS2, join($spstr, $ws));//用_SP_又组合成了字符串??,然后又转换成了ucs2?                $ws = explode(_SP_, $wall);//又接着分割成数组?啥意思啊!!!                foreach($ws as $estr)                {                    $this->addonDic[$hw][$estr] = strlen($estr);                }            }        }
ログイン後にコピー


このコードは辞書ファイルをロードするものですが、ELSEコードのロジックがわかりません?簡単に言える人は


ディスカッションに返信(解決策)

あなたの辞書ファイルは ucs-2be によってエンコードされています

chr(0xFF).chr(0xFE) は ucs-2be の BOM です

あなた辞書ファイルは ucs-2be でエンコードされています
chr(0xFF).chr(0xFE) は ucs-2be の BOM です

_SP_ 定数を設定する目的は何ですか? ucs-2be の BOM を直接書き込んで変数に格納するだけです。なぜそれを計算するために chr() 関数を使用する必要があるのでしょうか。

chr(0xFF).chr(0xFE) は「xffxfe」と書くことができます

しかし、作者はあなたほど賢くないので、文字列関数を使用して書いています

chr(0xFF).chr(0xFE) は次のように書くことができます"xffxfe" と書かれています

でも、作者はあなたほど賢くないので、文字列関数を使って書いています
作者は dede の作者ですが、どうしてそんなことができるのでしょうか?ケンディング節、ジェヤンデ

彼かあなたかのどちらか

適応する方法がわかりません!

彼もあなたも

適応する方法がわかりません!
モデレーター、BOM ではなく _SP_ を文字列分割マークとして使用することがよくわかりません。

BOM はエンコーディング タイプの宣言です。_SP_ を BOM として解釈すると、理解が容易になります。

「ASCII 比較テーブルで FF と FE の 2 つの対応するエンコーディングが見つからない」ということはありません

define('_SP_', chr(0xFF).chr(0xFE)); define('UCS2', 'ucs-2be');$spstr = _SP_;$spstr = iconv(UCS2, 'utf-8', $spstr);echo bin2hex($spstr);
ログイン後にコピー
ログイン後にコピー
をもう一度見て、efbfbe を取得してください
これは utf -8 の BOM

なぜこのようなことをしたのかについては、辞書ファイルを見れば何が起こっているかがわかります

BOM はエンコーディング タイプの宣言であり、理解を助けるために _SP_ は BOM として解釈されます

あなたは「in」ではありませんascii 比較「FF と FE の 2 つの対応するコードがテーブル内に見つかりません。」

define('_SP_', chr(0xFF).chr(0xFE)); define('UCS2', 'ucs-2be');$spstr = _SP_;$spstr = iconv(UCS2, 'utf-8', $spstr);echo bin2hex($spstr);
ログイン後にコピー
ログイン後にコピー
をもう一度見て、efbfbe を取得してください
これは utf-8 の BOM です

なぜ彼がこのようなことをしたかについては、あなたはそれが何かを知っているでしょう辞書ファイルを見てみるとそうなります
あなたが言ったことは間違っているようですが、誰も知りません

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート