0

私は単純な「暗号」スクリプトを作成する任務を負っています。暗号は、提供された文字列内の他の文字をランダムに置換し、暗号文の最後に追加の文字列として置換を発行することによって構築されます。

これは、英数字および一部の記号では正常に機能しているようです。しかし、スクリプトにGBP記号(£)を発行しようとすると、機能しなくなりました。

これで、すべてのステップでUTF-8エンコーディングを使用していることを確認しました。

スクリプトは1ページで構成されています。PHPファイルの先頭には、次のものがあります。

<?php header("content-type: text/html; charset=utf-8"); ?>

私のHTMLページでは、次の<head>領域にこれがありました。

<meta charset="utf-8" />

私の「暗号」および「解読」形式では、次のようになります。

accept-encoding="utf-8"

Chromeでページを読み込むと、[ツール]-> [エンコード]でチェックインすると、UTF-8エンコードを使用しているように見えます。

問題は、私のスクリプトが各文字を1つずつ実行するときに、GBP記号の長さが2文字であると見なしていることのようです。strlenこれは、またはを使用する場合でも当てはまりますmb_strlen

GBPシンボルや他のシンボル(まだテストされていません)を1文字の長さにまで削除できる方法はありますか?または、現在の文字が長さ2の特殊文字であることを検出し、それに応じてイテレータを進めるために、いくつかの追加ロジックをプログラムする必要がありますか?

よろしくお願いします。

4

1 に答える 1

0

私は解決策を見つけたので、他の人が同様の問題に遭遇した場合に備えて、私の質問を未回答のままにしたくなかった.

非常に単純なランダム置換暗号を作成しています。暗号文は、文​​字列内の文字を他の文字にランダムに置き換える必要があります。したがって、文字数が多いほど、難読化されているように見えます。ただし、暗号テキストには、文字列の末尾に置換テーブルもランダムに含まれています。そのため、いくつかの例を次に示します。

Hello, World!

になる

Ho,,!lrd! ,We rl,HHWd,l!eeor dWo!、または,Wlle!Hoe lrd Hr eW!doeWoH,lldr,!、またはW,HHodleorH !d lH,doorr lHW!!e,We

元の文字列を反復処理し、ループ内の位置にある文字を見つけて、元の文字と置換文字を保存していました。Unicode 文字の問題は、実際には 2 バイト文字に変換される Unicode 変換文字が接頭辞として付けられているように見えることです。これを説明するために、ループ内のその位置で現在使用されている文字が文字コード 194 であるかどうかを単純に検出し、そうである場合は、同じ「文字」の一部として次の文字を追加しました。

文字コードを見つけるために、次の PHP コードを使用しました。if(ord($letter) == 194){ ... }

これは、私が投げることができるすべてのキャラクターにうまく対処するのに役立ちました.

于 2013-02-26T13:37:36.093 に答える