ワープロ敏感なゲームのような最近のもので、マスキング処理を強化するために、そのようなので、上の数字、記号、文字やなど他のものに加えて、文字の文字列をフィルタリングする必要があります。
まず、情報へのアクセスと、私は機能を書きました:
例:入力文字列内の文字数を返します。
std ::文字列 StrWithOutSymbol(CONSTのstd :: 文字列&ソース) { ストリングsourceWithOutSymbol。 int型私= 0 ; 一方、(ソース[I] =!0 ) { 場合(ソース[I]&0x80の) { sourceWithOutSymbol + = ソース〔I〕。 sourceWithOutSymbol + =源[I + 1 ]。 I + = 2 ; 他に { 私は ++します; } } リターン
sourceWithOutSymbol ;
}
この機能の原理は漢字を判断するORD($ strの)&0x80であります
80バイナリコード1000 0000に対応し、最上位ビットは、10文字のフォーマットとして知られている代表的な漢字の符号化形式は2つのバイトを占有する、ものであるが、文字を表します
「Windowsの、簡体字中国語文字セットエンコーディングが同時に高い時間は0x00で〜0x7Fまで、1バイトである場合には表現する1つのバイトと2バイトで、0x80のは2バイトで表現する場合よりも高く、 "
あなたが0x7fのより大きいのバイトコンテンツを見つけた場合、それは(パッチワークに別のバイトで)でなければならない文字、それを判断する方法を0x7Fをより確かに大きい?
から0x7f(1111111)は0x80(10000000)である番号の後ろに、私はしたいです0x7Fまで、このバイトの最上位ビットは間違いなく1よりも大きい、我々は唯一の最上位ビットがリストに1であるかどうかを判断する必要があります。
:方法分析
ビットと(同じのみ1ビットが1であり、そうでなければ0)
として:第3の数は、(100)とともに4長いビットであるかどうかを決定するために、最初の決意の数図2は、1だけ2(10)ビットである。
同様かわずか1(10000000)と8位に決定すると0x80のビットです。
なぜここ>から0x7f?PHP線はまた、強く型付けされた言語内の他に、負示すために使用されるバイトの最上位ビットは、負のは確かから0x7F(最大整数)以上ではないかもしれません
別の例:
コードはassic 97(1100001)である
コードassic 65(1000001)であります
B assicコードは98である(1100010)
assicコードB 66(1000010)であります
:文字AZ、限り、六位は間違いなく1で小文字として、私たちはケースを決定するためにこれを使用することができます:パターンが見つかり
配置する限りは0x20(100000)との手紙と同様のため、この時間をして判決を:
IF( ORD($)&0x20の){
//大文字
}
どのように0 :?に1行目に六位にすべて大文字を入れて
$ A = 'A';
$ A = CHR(ORD($ A)&(〜0x20の));
$ Aエコー。
私はそれが、この機能は、プロジェクトに追加されます確信して、ファイル名を指定して実行、タイプ中国のチェックをクリック!プロジェクトが与えられていますか????配列の境界????
これは私が文字列C ++に文字列を渡すとき、私はUTF-8エンコードに渡される使用エラーが発見されたココス-LUAを見つけ、なぜ、ですが、私はUIF-8を見に行きました符号化規則が見つかりました。
UTF-8エンコーディング規則:1バイトのみが最上位ビットが0である場合、それはその最高レベルからマルチバイト、最初のバイトである場合、連続する2進数の1ビット値の数がコードする決定10バイトの残りのバイト数が開始されます。UTF-8変換テーブルは次のよう:
そして私は、エンコードGBKに従って操作される前に、GBK各漢字についての2バイトのみ、そして可能であれば中国UTF-8 3バイト、4バイトなので、5あるいは6、機能とクロスボーダーな状況が発生するがあるだろうと同じように、その文字列は、追加治療の必要性について、UTF-8でエンコードされたので、私は新しい機能を書いています:
中国のスクリーニング機能でUTF-8でエンコードされた文字列:
std :: 文字列 censorStrWithOutSymbol(CONSTのstd :: 文字列&ソース) { ストリングsourceWithOutSymbol。 int型私= 0 ; 一方、(ソース[I] =!0 ) { 場合(ソース[I]&0x80の &&源[I]&0x40の &&源[I]&0x20の) { int型:バイト= 0 。 もし(ソース[I]&0x10の) { :バイト = 4。 } 他 { :バイト = 3 。 } のための(INT A = 0 ; <:バイト; ++ ) { sourceWithOutSymbol + = ソース〔I〕。 I ++ ; } } そう であれば(ソース[I]&0x80の &&源[I]&0x40の) { I + = 2 ; } 他 { I+ = 1 ; } } 戻りsourceWithOutSymbolと、 }
ファイル名を指定して実行、成功をクリックしてください!快適。