1.ページ全体が文字化けします。
まず、お客様のPerl/CGIプログラムの文字コードをご確認ください。サーバサイドSHTML for Perl/CGI(体験版を含む)は、難読化したいと考えておられる文字コードが特定されている必要があります。引数を省略された場合には、お客様が申し込みをされた際にご記入いただいたメインの文字コードでエンコードされていると解釈して難読化を行います。内部的に、文字コードの自動判定などは行っておりません。 文字コードの自動判定は100%の精度では不可能な場合がありますし、また、毎回判断させるのも無駄な話であり、多少動作速度に影響するはずです。 Advancedコースの場合、複数の文字コードに対応していますので、メインの文字コードをEUC-JPとされた場合に、Shift_JISやUTF-8の文字列を難読化したい場合には、それぞれ、第4引数に「sjis」「utf8」を指定していただく必要があります。第4引数を省略されている場合には、「EUC-JP」と判断されてしまいます。 ※ Standardコースの場合、一つの文字コードにしか対応していません(有料オプションで使いした場合を除く。)ので、第4引数は無視されます。登録申請時の文字コードであると仮定して難読化するため、登録申請時以外の文字コードでエンコードされた文字列を引数に渡すと確実に文字化けします。 例えば、Standardコースをご利用で、EUC-JP版をご購入いただいた場合を考えてみます。Shift_JISでエンコードされた文字列をEUC-JP版では処理できませんので、Jcode.pmやjcode.plなどでお客様の自前プログラムにて、一旦、EUC-JPに文字コードを変換していただきます。その後、弊社プログラムにて難読化処理を行っていただく必要があります(必要に応じて、難読化後の文字列をEUC-JP→Shift_JISに再変換していただく必要がある場合もあるでしょう)。ただし、Shift_JIS→EUC-JPの文字コード変換の際に問題になりやすい文字(機種依存文字など)には細心のチェックが必要です。機種依存文字が含まれていないという保証があるのであれば問題ありませんが、機種依存文字が含まれている場合には、気をつけないと、難読化処理の前の文字コード変換時に文字化けが発生してしまっていることも十分に考えられます。ご注意ください。 難読化対象の文字列の文字コードが想定していたものであるのに文字化けが発生している場合には、 print "Content-type: text/html; charset=EUC-JP\n\n"; のように、文字コードをレスポンスヘッダの中で明示するようにしてください。また、HTMLソースのヘッダ部で、<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">と明示するようにしてください。 2. 特定のページで、レイアウトが崩れます。
いくつかの条件が重なると、レイアウトが崩れることがあります。それは仕様ですが、解決方法はあります。 まず、レイアウトが崩れる条件がある場合ですが、
対策は、 getEncryption_shtml関数を呼び出すのを複数回に分けていただくことです。問題のJSファイルを含むソースを境界にしてソースを分割して難読化させるようにします。例を挙げて説明しますと、 shtml_logo.jsというJSファイル内にて、Flashファイル表示用のHTMLソース(objectタグやembedタグ)をdocument.writeしている場合を考えてみます。 3. 空白ページが表示されます。
空白ページが表示される場合、いくつかの可能性が考えられます。まず、空白のページでHTMLソースを表示させてみてください。その時、
「<HTML></HTML>」の場合、「どこでもSHTML」で作成したプロテクトコードが不適切なために、想定外の時にプロテクトコードが働き、真っ白のページ(about:blank)が表示されているものと思われます。ですから、どこでもSHTMLでJSファイルを作成しなおす必要があります。 「<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 〜」の場合ですが、ブラウザが出力する文字列が存在しないときに、Windows版Internet Explorerが勝手に作成しているソースです。即ち、原因はprintする際に、print対象の変数名(難読化された文字列が入っている変数の名称)を書き間違えているか何かで、空の文字列をprintしていることが原因であると思われます。 また、第3の「サーバサイドSHTML for Perl/CGIで難読化したソース(JavaScript)もしっかりと表示されている場合」の場合ですが、
4.Shift_JISでプログラムしていますが、「予」「能」「申」など一部の文字とその後続の文字が文字化けします。
まず、確認していただきたいのは、難読化前から文字化けが発生していなかったかということです。Shift_JISの場合、2バイト目がASCIIと重なるため、問題が発生しやすいです。いわゆる「5C問題」はその典型です。
ソЫⅨ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡纊犾
は通称「ダメ文字」と言われ、Shift_JISで扱う際には細心の注意が必要です。 print "ソースを表示されると、画像のパスなどが予測可能です。"; では、「メ[スを侮ヲされると、画像のパスなどが卵ェ可狽ナす。」と文字化けします。 print "ソ\ースを表\示されると、画像のパスなどが予\測可能\です。"; のように、文字化けを引き起こす文字の後ろに「\(バックスラッシュ)」をつけなければなりません。もしくは、シングルクォートで囲むようにして、 print 'ソースを表示されると、画像のパスなどが予測可能です。'; としなければなりません。 Shift_JISのページで、これらの対策を難読化前にされていない場合は、サーバサイドSHTMLで難読化後もやはり文字化けします。ただし、文字化けのされ方は全く同じというわけではなく、文字化けの範囲が難読化前よりも広がる場合があることも弊社で確認しています(文字化けの範囲は、後続の文字によって左右されます。)ので、十分にお気をつけください。 ※ datファイルやHTMLファイルなど別ファイルにこれらのダメ文字がShift_JISで保存されていて、それをPerl/CGIプログラムからopenして読み込み処理する場合は、特別な処理をせずとも、文字化けしません。 5. 「domin error」というアラートが表示されます。
「サーバサイドSHTML for Perl/CGI」(体験版/製品版とも)は、ご登録していただいたサーバでのみ動作するようにしてあります。サーバ名の名称を「$server_name_shtml=$ENV{'SERVER_NAME'};」でチェックさせていただいています。 サブドメインの違いは問いませんので、http://www.example.com でご登録いただいた場合には、test.example.comやlocalhost.example.comなどをテストサーバ名として運用していただければと存じます。つまり、お手数ですが、テストサーバで動作させる場合には、テストサーバのサーバ名を一時的にでも、hostsファイルやhttpd-vhosts.confを調整することで、ご登録のサーバ名(ドメイン名)と一致化させるようにしてください。 テストサーバの名称をどうしても調整できない場合には、サポートにお問い合わせください。 6.「Internal Server Error」「内部サーバエラー」「500 エラー」になります。
まず、難読化を行わない形なら、「Internal Server Error」が発生しないことを確認してください。次に、エラーログを確認することで、原因をつかめることがあります。 弊社がさまざまなテストをする中で経験した原因の一つは、
7. md5エラーが表示されます。
体験版及び製品版内のma_shtml.plというファイルは触らないようにしてください。ライセンス管理上、MD5でハッシュ値を生成させ、チェックしています。改行コードはCRLFもしくはLFのどちらでもOKなようにはしてあります(お客様サーバがMacサーバである場合には、改行コードCRでも動作するようにもちろんします)が、MD5の特性上、改行が一つ増えたりするだけでもハッシュ値が変わり、動作しなくなる原因になります。
|
HTMLソース難読化用Perlライブラリ 「サーバサイドSHTML for Perl/CGI」 | © 株式会社プランセス | お問い合わせ |