いつもお世話になってます。
少し前に質問を投稿したはずなんですが検索しても出ないし
メールも届かないしで・・・もう一度投稿させて頂きます。
只今Perlでフォームから投稿された文字が縦書きに表示される様に作ってるのですが…行き詰まってしまいました。
自分で出来たのは
$message =~ s/(<[^>]+>)|(\&\w+;)|([-.!~*'()\w;\/?:\@=+\$,%#\[\]\^`"{|}]{1})/($3 eq '')?(($2 eq '')?$1:"<BR>$2"):"$3<BR>"/eg;
こんなショボーイ記述になってしまいまして・・・・
これでは半角英数字だけしか縦書きにならないし、おまけにどこまでも一列に縦書きにされて次の行へ行かず、長ーくなってしまいます。
どうににか15文字目で</TD><TD>タグを入れて次の行へ移れる様にしようと他の縦書きCGIの中身を拝見したりと研究してみたのですが
さっぱりわからず・・・どうか助けていただけないでしょうか。
宜しくお願い致します。
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は作ったことがありませんが、質問文を見てパッと思ったのはこの方法です。
ご存知とは思いますが、プログラミングは十人十色。
あくまでも参考ということで、自信なし。
私の書いていたものは、半角英数字が繋がってある場合、○文字目に<br>を入れる、というかたちになっています。
なんと、substrも知っていましたがこれが使えるとは!
考え付きませんでした’’!)
まだ縦書きに成功していませんが、是非参考にさせて頂きます!
色々と試してみたいと思います。有難うございました!!
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関数で切っていく
・正規表現
→数字をカンマで区切るような方式で
などが考えられると思います(一つ目が一番簡単でしょう)
大変だとは思いますが、頑張ってください。
ありがとうございます!!
一文字ずつ区切って<br>を入れる方法、そんな短い書き方でいけるとは!感動です
そして改行をテーブルにすると崩れるとの事・・・
全然知りませんでした^^;)
まだ作成中で縦書きはできていませんが、一歩所か数歩前進しました!
本当にありがとうございます!頑張ります!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- WordPress(ワードプレス) ワードプレスで、左寄せ画像と文字を横並びにせず、画像の下に文字を表示される方法を教えてください 1 2022/04/24 11:06
- 建築士 建築士製図試験での縦距離の数値の書き方を教えて下さい 3 2023/07/16 11:36
- Word(ワード) 最高裁判所から通達がある Wordの書式設定。所謂 裁判所に提出するすべての書類のことです。 A4縦 2 2022/12/23 15:00
- Word(ワード) 改めての質問 3 2023/05/17 09:03
- 日本語 縦書きがごく一般に使われている国は日本語以外にありますか?日本の場合、新聞、本、教科書はほぼ100% 2 2022/06/24 18:30
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- その他(gooサービス) ブログ投稿時の絵文字使用について 2 2023/07/21 14:55
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- Word(ワード) ワード。長い四角の中に文字を体裁良く入力するには。 2 2022/09/24 14:19
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
プログラミングでは、半角括弧...
-
IEからEdgeへの移行に伴うIMEの...
-
エクセルにMicrosoft Barcode C...
-
word差し込み印刷 半角カタカ...
-
VBで、String型のデータが、...
-
VBScriptの正規表現で半角スペ...
-
文字コード変換時の文字化けに...
-
VBA 文字に半角が含まれて...
-
CString Format にて全角空白文...
-
char型全角数字から、int型半角...
-
「一角」って何でしょうか
-
[VBScript]バイト長の判定
-
LaTeXで半角カンマと全角カンマ...
-
全角スペース
-
VB.net、テキストボックス入力...
-
エクセルでの”々”の扱い
-
Excelの中に全角ひらがな、漢字...
-
正規表現で、全角文字を半角文...
-
半角・全角の由来
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
住宅にカナを入力する際に丁目...
-
全角英数字の必要性が理解できない
-
Excel関数またはVBAでの質問に...
-
エクセルにMicrosoft Barcode C...
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 文字に半角が含まれて...
-
COBOL・全角判定
-
プログラミングでは、半角括弧...
-
word差し込み印刷 半角カタカ...
-
メモ帳の段落の揃え方
-
よくアカウント等に使われる 半...
-
Accessのテキストボックスの入...
-
ダブルコーテーションの置換
-
エクセルでの”々”の扱い
-
小説の点々は……と繋がらなくて...
-
大文字と全角文字は同じ意味で...
-
[VBScript]バイト長の判定
-
封筒の宛先で縦書きの書き方
-
VBで、String型のデータが、...
おすすめ情報