- ベストアンサー
制御コード文字の受け取りと処理
普通に作ると、制御コード文字の入力時に不具合を起こすので、何らかの処理をしなくてはなりません。 <>\"';,?&などです。 <>などは、<や>に変換してしまえば良いの、ですが他の文字は入力を許し、データファイルにも書き残したいのです。 気をつけることは、 (1)データファイルのフィールド・デリミッタを、タブなどのこれらに無いものにすること。 それから、何をしたら良いでしょう? 特に、?や&は起動時のパラメータ渡しに使いますので、それを入力されると困りますね。 \'";も同じですが、どのような処理をすれば良いのかアドバイスいただけるとありがたいです。 ちなみに、私は中級レベルと考えていただいて良いかと思います。 つまり、ゼロから作る力は無くても、フリーのCGIなどを自分の仕様に合うようにグチャグチャに改造する力はあります。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 「制御コード」について
「制御コード」のイメージがうまく沸きません。今は、文字コードごとにつけられた表示する時に使われるコード、くらいのイメージです(例えば、エディタで改行するときは、改行のためのコードが割り当てられていて、それが一つの制御コード、のような感じ)。 この制御コードは、文字コードごとに違うのでしょうか?とすると、違った文字コードで読み込んだ場合、改行などの処理が間違って表示されるのでしょうか? よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 文字実体参照が勝手に変換されてしまう
簡単な問合せフォームを作成中に文字実体参照に変換した文字が、元に戻されてしまい困っています。簡単なサンプルを作成してみましたが、以下の様な状態です。 1.入力フォームを持ったHTMLに 「<>と<と>」 と入力し、xxx.cgiに渡します。 2.xxx.cgi内で入力文字列を取得し、文字実体参照に変換後<hidden>で値を保持、再度xxx.cgiに<hidden>の文字列を渡すようにします。この時点で入力値は 「<>と&lt;と&gt;」 となります。 3.再度xxx.cgiが呼ばれると、文字実体参照に変換する処理が行われる為、入力値が 「&lt;&gt;と&amp;lt;と&amp;gt;」 となるはずですが、 「<>と&lt;と&gt;」 となってしまいます(変換処理が行われているはずなのに変換されていない)不思議に思って変換前のCGIの引数を確認してみると、 「<>と<と>」 と文字実体参照が元に戻されてしまっています。 ちなみに文字実体参照の変換処理は$valueに対象の文字が入っているとして以下の方法で変換しています。 ---------- $value =~ s/&/&/g; $value =~ s/"/"/g; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\n/<BR>/g; ---------- こういった現象についてでも何か分かるようでしたら宜しくお願いします。
- ベストアンサー
- Perl
- テキストファイルのデータ区切り文字(制御文字)について
テキストファイルにデータを保存しているのですが、区切り文字タブ\tはフィールドの区切りに使っています。 その状態で、仮に1つのフィールドにデータを詰め込む場合、,(カンマ)で区切った場合にデータ自体に金額の,があった場合、誤動作します。フィールドの区切りはタブ\tは普通ですが、1つのフィールドに複数データを持たせる場合の区切り文字は\0など使っても問題ないのでしょうか? 環境はWindows, Linux両方で使います。\0を使ってそれが文字列の最後とまた誤動作しても嫌です。 皆さんは\t以外にテキストデータの区切りにどのような制御文字を使っていますか?ちなみに改行は1レコードの区切り文字です。
- ベストアンサー
- Perl
- 制御文字を含む文字列を扱うには
field char(50) binary not null unique primary key,fulltext (field) この設定で作られたフィールドがあり、主にlike検索をされます。 このフィールドには本来10進数の数字の文字列を入力する事を考えていたのですが、(数値としては桁数が大きすぎる事と、その数字列の中に"123"を持つ物を探すなど数量とは関係無い検索がされる事から文字列にしています) MySQLのリファレンスによると、インデックスの対象になる文字列は桁数が短い方がいいようなので、どうせ数値でなく文字列を使っているのならと思い、1バイトで表現出来る全ての文字を使い256進数で表し、桁数を節約しようと考えました。 256進数に直してしまうと10進数の状態で"ある数字列"を持つのかどうか分からなくなるのではないかと思うかもしれませんが、それはこのフィールドに行われるlike検索の特徴により解消されます。 長い前置きでしたが、質問はタイトル通り制御文字を含む文字列を扱う事、言い換えれば0~255の全ての文字コードを文字列データとしてMySQLでインサート・全文インデックス・セレクトする方法です。このフィールドのデータは出力される事は無く、selectのwhere部分に使われ、出力されるのは同レコード内の別のフィールドのデータです。 素直に以下のコードでテストしましたが失敗しました。 while ($i < 50){ $rand = mt_rand(0,255); $str .= chr($rand); $i++; }/*insertする文字列$strを生成*/ $sql = "insert into table(field) values ('$str')" $strの中に制御文字や"や'等の文字が入るとinsertが失敗し、追加出来たレコードについても、コマンドプロンプトからselectして出力してみるとPCが警告音を連発します。 何か方法は無いでしょうか?
- ベストアンサー
- MySQL
- HTMLで入力値を半角大文字に制御
こんにちわ。 HTMLで入力される場合、必ず半角大文字に制御したいのですが、 スタイルシートはIMEのオン・オフしか制御できず、大文字に 固定制御することができません。 JavaScriptでonChange時にでも入力値を大文字に変換という手も あると思うのですが、出来たらそんな面倒なことをせずとも 制御したいと思っています。 もし良い方法がありましたら、是非、教えて下さい。 どうぞ宜しくお願い致します。
- ベストアンサー
- HTML
- 正規表現:対応する文字列A~文字列Bの検索(入れ子あり)
いつもお世話になります。 以下のように (??{}) というのを使うと正規表現を再帰することによって入れ子があっても対応するカッコにマッチできることが分かりました。 以下のプログラムでは < から対応する > までを抜いています。 #! perl # betweenBracket -- < から対応 > までを抜く # 全角ブランクで字下げを表現しています。 $re = qr/ < [^<>]* (?: (??{$re}) [^<>]* )* > /x; while(<DATA>) { chomp; for (/$re/g) { print "$_ "; } print "\n"; } __DATA__ I <love> you I <love> <you> <I <love> <you>> 実行結果: <love> <love> <you> <I <love> <you>> これですが、<、>のような1文字のカッコではなくて文字列による開始~終了でもできるでしょうか。 具体的に言うと < から > までと言う風にしたいです。 #! perl # betweenEntity -- < から対応 > までを抜く ・・・???・・・・ __DATA__ I <love> you I <love> <you> <I <love> <you>> 実行結果: <love> <love> <you> <I <love> <you>> よろしくお願いします!
- ベストアンサー
- Perl
- jsp 改行コードで改行させて表示したい
はじめまして。 PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。 データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。 過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。 例えば、あるテーブルのある項目に、 A B C というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。 これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、 ABC と改行されずに表示されます。 htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、 A<BR>B<BR>C と「<BR>」が文字列として表示されます。 htmlをソース表示すると、「A<BR>B<BR>C」で、親切にも「<」「>」をそれぞれ「<」「>」に勝手に置き換えあくまで文字列として表示してくれるようです。 試しに改行コードを「<BR>」に置き換えても予想通りその部分は <BR> とそのまま表示され、そのソースは「&lt;BR&gt;」でした。 「<」や「<」等をそれぞれ「<」「&lt;」のように置き換える作業は、どこが行っているのでしょうか。 また、改行位置で改行させるにはどうすればよろしいでしょう。 OSはwindowsXPです。 無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。 宜しくお願い致します。
- ベストアンサー
- Java
- 文字コード体系の違い
こんにちわ。 mdbでテーブル定義をしたときに, ある列の「フィールドサイズ」を10としました。 そしてVB-VSFlexGridでそのテーブルへ書き込む処理を 作り,グリッドの入力桁数を「.EditMaxLength」プロパティ で制限しようとしました。 ところが「.EditMaxLength」=10とすると, 実際の画面では全角5文字しか入力できません。 でもmdb直接入力すると,全角10文字入ってくれます。 この違いは何が原因なのでしょうか? 教えてください。お願いします。
- ベストアンサー
- Visual Basic
- 文字型フィールドの数値データの抽出
mdbファイルを、VB6.0+ADO2.7で扱っています。 文字型フィールドに数値データが入力されたレコードを抽出したいのですが、何かよい方法はないでしょうか? そのフィールドに文字型データが入力されているレコードもあり、それを除外したいのです。 SQLでも、.filterプロパティでも結構です。お知恵を下さい。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- dosのバッチ処理にて
winのDosにてバッチ処理をする際に処理中にコマンド入力を受付け、 入力されたデータを他のコマンドパラメータに設定することって 可能でしょうか?
- 締切済み
- Windows 95・98
- スキャンができなくなった際に表示される「PCとの接続を確認してください」メッセージについて解説します。
- EPSON社製品の中でもスキャン機能を持つ製品では、時々「PCとの接続を確認してください」というメッセージが表示されることがあります。
- しかし、実際にはPCとの接続は正常であり、他の原因が原因でスキャンができない場合もあります。
お礼
非常に丁重な解説をいただき、ありがとうございました。 「なるほど~」と頷きながら読ませていただきました。 先日、フォームメールcgiを作って、アドレス欄も入力するようにして、そこに「;」や「,」で複数のアドレスを入れたらうまくいかなかったり、掲示板cgiで、「\」を入力したら異常な動作をしたのです。 それで、それらは普通では入力できないのだと考えていました。