• ベストアンサー

Javascript使用時のForm文字数上限は?

最近のJavascriptにおける 「1バイト文字も2バイト文字も一文字として判断する」 という特性を利用して、外字文字列のコードを抽出したいのですが… 対象としたいテキスト文字数が80万字ほどあり(^^;、 この量をTEXTAREAへpasteしてJavascriptで一気に処理できるか? という点を知りたいのです。 まだテキストが手元にないので試せないのですが、 知識としてでも知ってる方がいたらお教え下さい。 ブラウザ環境はIE5.0+Winです。 要するにcsvテキストからシフトJISの0xF040~FFFCを含む行数を 抽出したいだけなので、perlで簡単な方法があればかまわないのですが…

  • izk13
  • お礼率30% (3/10)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

さすがに80万文字っていうのは無理じゃないでしょうか。分割するにしても、いろいろと面倒そうですし、ご自分でも指摘していらっしゃるように、perlで簡単なスクリプトを作るのが現実的だと思います。 アルゴリズムとしては、 1. 1byte読み込む 2. ~0x7f、または0xa1~0xdfなら、1.へ 3. 0xf0~0xffなら、外字用処理を行った後、1.へ 4. それ以外なら、1byteカラ読みして、1.へ でいいでしょう。

izk13
質問者

お礼

回答ありがとうございます。 やはりperlですか。 「\」処理など変なミスがあると余計なロスが出そうで… とりあえずそれで試してみます。

その他の回答 (2)

noname#25358
noname#25358
回答No.3

 補足みました。  NNは2バイト文字を1文字としては扱いません(^_^; これはIEだけの仕様です。  IEは内部でUNICODEを使用しており、全角半角に関わらずすべての文字を2バイトコードとして扱っています。これが、全角と半角を両方とも1文字として扱える正体です。  NNは内部でUNICODEを使用していないので、2バイト文字は飽くまで2文字なのです。  ま、NNは使わないということであれば関係ないですね。  ちなみにもうプログラムはJavaScriptで書かれたのでしょうか。 処理重くないですか?

izk13
質問者

補足

プログラムは「桐」というDBソフトに 外字検出関数という便利なモノがあったのでそれを使うことになりました(^^; NNの話ですが、4.75では a = "あああ".length; としたときに「3」と返します。 ちなみに4.01では「6」です。さらに、 A = "庁".charCodeAt(0); などとしたときも、4.75ではIEと同じく「24193」と表示します。 ちなみにNN4.01では「-110」と表示されます。 NNはバージョンによって2バイト文字の判定が違うと思います。

noname#25358
noname#25358
回答No.1

 えーとですね。  2バイト文字を1文字として数えるのはIEが昔からやってきたことで、NNでは逆に今でも2バイト文字は2文字です。  ですのでJavaScriptでやるのであればその辺の区分けが必要です。  Perl でできるんだったら Perl の方が簡単ですよ(^_^; わざわざ苦労することもないです。IEとNNの区分けも面倒ですし。  Perl では、文字列をシフトJISに変換したのち、   if ( $st =~ /([\xF0-\xFF][\x40-\xFC])/ )  おそらくはこれで、文字列$stの中に外字が含まれているかどうかが判別できるはずです。上記のif文では、$st に外字が含まれていればtrueを、そうでなければfalseを返します。  たしか。  正規表現はあんまし使わないので自信はないです。何度かテストしてみてください。

izk13
質問者

補足

回答ありがとうございます。 Javascriptの実行はIEで行い、公開する類のものではないので大丈夫です。 最近のNN(4.75)では2バイト文字は一文字と数えていた気がするのですが… 関数によって違うのかもしれません。 HTMLのINPUT MAXLENGTHは相変わらず2バイト文字=2文字ですが。

関連するQ&A

  • HTML formタグの文字コードについて

    各サイトのフォーム<form>をまとめて1つのテキストにしています。 文字コードはShift-jisです。 元のページがShift-jisの場合、問題なく動作するのですが、 EUCやUTF-8の場合、テキストボックスに入力した2バイト文字が 化けてしまいます。 これらのサイトの<form>をShift-jisで動作するようにはできない でしょうか?

    • ベストアンサー
    • HTML
  • javascriptで文字コード変更

    いつもお世話になっております。 今回はjavascriptの文字コードについてお聞きしたいです。 現在、CGIの応答でテキストを受けて、それをjavascriptで変換して表示するというものを作っていますが、この応答に漢字、ひらがななどが入ると文字化けしてしまいます。 調べてみると、CGIの応答はshift-jisで返しているのですが、javascriptはUTF-8しか扱えないと書いてありました。 なんとか応答のCGIはShift-Jisを送り、javascriptでうまく表示できるようにしたいのですが、方法はないでしょうか? ご教授願います。

  • 入力文字のバイト数

    いつも参考にしております。 入力文字のバイト数のカウントについて質問をさせていただきます。 入力フォームなどで、入力文字数の制限をしたいと考えております。 文字を入力するたびに、バイト数がテキストボックスに常に 表示されるようにしたいと考えております。 以下を参考にできるのではないとか思っておりますが。 <script language="javascript"> <!-- function check() {  txt = document.myFORM.myTEXT.value;  n = txt.length;  if (n > 10) alert("10文字以内にしてください"); } --> </script> <form name="myFORM"> <textarea rows="3" name="myTEXT" onChange="check()"></textarea> </form> ご教授お願いいたします。

  • Javascriptで特殊文字を置換する方法

    表題の件で分からず教えてください。 PerlでHTMLとJavascript(HTML埋め込み)を作成しています。 Javascript(On Click)で、文字列を置換させたいのですが、うまくできません。 (最終的にやりたいことはTextAreaに埋め込んだタグ付き文章を「プレビューする」ようなイメージです) ■置換前の文字列 $body$ ■置換後の文字列 任意の文字列(タグを含む) ネットで調べたところ次の方法でできるようだったので試しましたが、できませんでした。 var rgexp = new RegExp("\$body\$", "g"); str = frm.preview.value.replace(rgexp, "■■■"); 「$」とエスケープ文字をはずすとうまくいくので、多分「$」で失敗しているのだと思いますが 解決が分かりません。 ※エスケープをはずすとPerlの出力時に怒られてしまいます お分かりになる方いらっしゃいましたらお願いします。

  • javaScriptで、テキストエリアのある文字列を見つけて、

    javaScriptで、テキストエリアのある文字列を見つけて、 その行から、1行目と2行目を消すという処理を行いたいのですが、 コーディングがわかりません。 教えて下さい。 (例) 下記のテキストエリアから、「<ターゲット文字列>」を見つけて、 その行から1行目と2行目、つまりは、「さしすせそ」と「たちつてと」を削除したいです。 -----textarea----- あいうえお かきくけこ <ターゲット文字列> さしすせそ たちつてと

  • iモードの絵文字16進数の正規表現について

    iモードの絵文字をフォームから送信された時の処理をperlでしています。 具体的にはフォーム内容をデコードする前に、文章に絵文字が含まれているか16進数の状態でチェックします。含まれていれば、それらを10進数表記に変え、データとして保存しています。 ここまでは上手くいったのですが、問題が発生しました。 iモードからはShift_JISでデータが送信されてきますが、このデータの中に2バイト目の文字コードが絵文字の1バイト目の文字コードと同じであり、かつその次の文字の1バイト目が絵文字の2バイト目と同じだった場合に間違ってその文字を絵文字として処理してしまいます。 つまりある2文字の2バイト目と1バイト目が偶然絵文字と同じ文字コードだった場合に絵文字として取り扱ってしまうのです。(例:滲滲) これを防ぐ方法が解る方がいらっしゃればご回答下さいm(_ _)m ※perlメモの「ただしくパターンマッチさせる」をShift_JISに変えてやってみましたが、うまくいきませんでした。。。

    • ベストアンサー
    • Perl
  • 外字作成時に参照する文字の見つけ方

    Win98SEとXPの両方を使っています 外字を作成するときに参照する文字を見つけるのに、私はWIN98SEでは、あらかじめ、infoseekマルチ辞書から、その参照する文字のシフトJISコードを調べておいて、ウィンドウ→参照の画面で、コード欄にそのシフトJIS番号を入力して、参照文字を表示させていました。 ところが、XPでは、このシフトJISコードを入れると、全く違う漢字を表示してしまうのです。「一覧表の中から目的のものを探して・・・」なんて簡単に書いてありますが、一覧表を繰って探して行くのは容易なことではありません。 1)どうしてXPではコードが違ってしまうのでしょうか? 2)簡単に目的の漢字を(探して)表示させるのに、なにか良い方法はありませんか?

  • テキストエリアの文字数を数えたい

    Java初学者です。簡単な本をやり終えたので、ちょっと自分の役に立つ ものを作ってみようということになりました。 そこでレポート作成の際に使えそうな、 文字数、行数をカウントできるアプリケーションを作ることにしました。 具体的には、フレームは縦に2分割され、左側にボタン、右側がテキストエリアとなっています。 ボタンとは[文字数を数える][行数を数える][貼り付け]などのボタンです。 ボタンの下にその結果を表示するラベルも用意します。 貼り付けなどは既に用意されているpasteメソッドなどを使えば済む話ですが 肝心の文字数をカウントするのをどう実現するかで悩んでいます。 そもそも、テキストエリア内にある文字列?を直接扱う術が分かりません。 このままでは既に用意されている関数以外の操作は出来ないことになってしまいます。 テキストエリアないの文章をString型の変数に入れる、とかは出来ないんでしょうか。 幼稚な質問かもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • csvを使用したデータバインド(JavascriptとPHPについて質

    csvを使用したデータバインド(JavascriptとPHPについて質問) お世話になります。教えてください<m(__)m> 1ページ内でJavascriptで抽出ワードを入力・抽出し、表示された一覧のデータをcsvで保存できるようにしたいのですが、抽出から保存の間でデータが引き継ぐにはどうしたら良いのでしょうか。 http://www.makoto3.net/document/databind/smp021.htmlに <?php #Header("Content-type: application/x-csv; charset=Shift_JIS"); $tmpfname = tempnam("C:\xampp\htdocs\testdir", "file.csv"); $handle = fopen($tmpfname, "w"); fwrite($handle, "writing to tempfile"); fclose($handle); # CSVファイルに書き込み $wcsv_file = "data.csv"; $wopen = fopen($wcsv_file, "w") or die("wエラー:ファイルを開けません"); #wcsv_file = "data.csv"; # 書き込みと改行 #fputs($wopen, trim($write_value)); #fputs($wopen, "\r\n"); fclose($wopen); unlink($tmpfname); ?>

  • VBAでテキストを書き出す時に、文字コードを指定するには?

    VBAでテキストを書き出す時に、たとえば、 shift_jisなど、文字コードを指定して書き出すには どうすればいいのでしょう? unicodeはFSOを使えばいいことはわかったのですが…。