• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PerlのCGIで投稿された文字を縦書きに。)

PerlのCGIで文字を縦書きにする方法

このQ&Aのポイント
  • PerlのCGIを使用して、フォームから投稿された文字を縦書きに表示する方法について教えてください。
  • 現在、PerlのCGIを使用してフォームから投稿された文字を縦書きに表示しようとしていますが、うまくいきません。どうすればよいでしょうか。
  • PerlのCGIでフォームから投稿された文字を縦書きに表示するための方法について教えてください。

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

  • ベストアンサー
noname#48234
noname#48234
回答No.1

こんにちは。 正規表現やマッチング演算子は苦手でよく分からないのですが、SVAHAさんのソースは入力されたメッセージに記号エスケープなどの処理をして一文字ずつ<br>で改行しているのでしょうか? 文字列の一定部分を取り出す関数「substr」を使えばもっと簡単にできると思いますよ。 この関数は文字列を取り出す位置と取り出す長さが指定できます。 $message = "012345"; $line1 = substr($message,0,3); 0+0番目から3文字 $line2 = substr($message,3,3); 0+3番目から3文字 表示結果は$line1が012、$line2が345になります。 <BR>と表組み、ループ処理などを組み合わせればできそうですね。 また、表組み<table><tr><td>は左上から書かれてしまうので、文章の各行のデータを配列にしてreverseし、文章の終わりの行から表にするなどの工夫が必要でしょう。 縦書きCGIは作ったことがありませんが、質問文を見てパッと思ったのはこの方法です。 ご存知とは思いますが、プログラミングは十人十色。 あくまでも参考ということで、自信なし。

SVAHA
質問者

お礼

私の書いていたものは、半角英数字が繋がってある場合、○文字目に<br>を入れる、というかたちになっています。 なんと、substrも知っていましたがこれが使えるとは! 考え付きませんでした’’!) まだ縦書きに成功していませんが、是非参考にさせて頂きます! 色々と試してみたいと思います。有難うございました!!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • DKG
  • ベストアンサー率40% (2/5)
回答No.4

こんな感じでどうでしょう? ------------------------------------------------- # 縦書きにする文字列 $str = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわおん'; # 折り返す文字数 $end_line = 5; # $str を文字単位に分割して配列 @chars に代入する # http://www.din.or.jp/~ohzaki/perl.htm#JP_Split(Perlメモ) $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; @chars = $str =~ /$ascii|$twoBytes|$threeBytes/og; # 一つ一つの文字に<br>を付け加えながら%kaに5文字ずつ代入 foreach(@chars){ $_ .= "<br>"; if(($i % $end_line)==0){$d++;} $ka{$d} .= $_; $i++; } # 行数 $h = int($i / $end_line); if(($i % $end_line) > 0){$h++;} print "Content-type: text/html\n\n"; print '<meta http-equiv="content-type" content="text/html; charset=euc">'; print "<table>\n<tr>\n"; for($g=$h;$g>0;$g--){ print "<td valign=\"top\" align=\"center\" width=\"1\">$ka{$g}</td>\n"; } print "\n</tr>\n</table>"; ------------------------------------------------- TABLEの余白を広げたり、スタイルを使うともっときれいに表示されると思いますよ。もちろん文字コードはEUCじゃないとちゃんと動きません^^ あとnatsuki_tkさんの言う通り半角は全角にしてあげるともっときれいになると思います。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm
すると、全ての回答が全文表示されます。
回答No.3

IEのみならHTMLで、またCSSを使っても縦表示できますが、 全ブラウザ対応を考えると難しいですよね(^^; 簡単なアドバイス程度ですが、 ・半角文字→全角に変換 (縦に半角と全角が混じると変なので) (jcode等を使えば半角カナ等の変換ルーチン利用できます) ・一文字ずつ区切って<br>をいれる。 簡単に、$line = join("<br>",split("",$line)); という雰囲気でできるとおもいます。 また、どの程度まで対応させるか難しいですが、 ・記号類変換(カギ括弧など) も見栄えを考えたら必要かと思います。 改行もテーブルに任せたいですが、やはり崩れてしまうと思います。 15文字目で次の行に移す方法ですが、 ・一文字ずつの配列にしてしまってから、インデックス値を操作  →split("",$line);を使う ・substr関数で切っていく ・正規表現  →数字をカンマで区切るような方式で などが考えられると思います(一つ目が一番簡単でしょう) 大変だとは思いますが、頑張ってください。

SVAHA
質問者

お礼

ありがとうございます!! 一文字ずつ区切って<br>を入れる方法、そんな短い書き方でいけるとは!感動です そして改行をテーブルにすると崩れるとの事・・・ 全然知りませんでした^^;) まだ作成中で縦書きはできていませんが、一歩所か数歩前進しました! 本当にありがとうございます!頑張ります!

すると、全ての回答が全文表示されます。
  • ryota2
  • ベストアンサー率43% (61/140)
回答No.2

もし、スタイルシートを使ってもいいのなら <div style="writing-mode:lr-tb">縦書き<br>になります。</div> といったことができます。 ご参考までに

SVAHA
質問者

お礼

スタイルシートでもできるんですよね~ でもやっぱりNNでは効かないのでなんとかスタイルシート意外で頑張ってみたいと思います ありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A