実現したいこと
半角で40文字いっていない場合は半角スペースで埋めたい。
該当のソースコード
sprintf("%-40s", 'テストテストテ');
実際に下記の様に追加は出来ているのですが、
合計26文字にしかなりません。
'テストテストテ '
試したこと
調べているのですが、どれも固定数を追加などで自分の求めているものに行きついていません。
https://qiita.com/tksnino/items/7188b95ea7f8e3a3b8dc
ご教授お願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
mb_strwidth()
を利用するとよいかもしれません。
mb_strwidth(string $string, ?string $encoding = null): int
文字列 string の幅を返します。半角文字は 1 として、全角文字は 2 として数えます。 東アジアの文字の長さに関する詳細は http://www.unicode.org/reports/tr11/ を参照ください。
php
1<?php 2 3$str = 'テストテストテ'; 4$pad_width = 40 - mb_strwidth($str); 5$str .= str_repeat(' ', $pad_width > 0 ? $pad_width : 0); 6var_dump(mb_strwidth($str)); 7var_dump($str); 8 9// int(40) 10// string(54) "テストテストテ "
投稿2024/09/13 18:53
総合スコア21343
0
普通のPHPのコードはUTF-8で書くので、半角カナも、ほとんどの全角日本語文字も両方とも3バイトです。キーボードから直接打てる半角英数記号は1バイトです。
半角カナが1バイトで、全角日本語文字が2バイトなのは、Shift_JISくらいですので、普通の等幅フォントを使うイメージで、「半角英数字記号や半角カナは幅1、全角日本語文字は幅2」として幅40にしたいのであれば、一旦Shift_JISに変換すると分かり易いです。
ただし、「UTF-8にはあるが、Shift_JISには無い文字」がいろいろあるので、そういう文字があると化けます。例えば「⒜」とか「㐂」とか。
PHP
1$x='テストテストテ'; 2$y=mb_convert_encoding( 3 sprintf("%-40s", mb_convert_encoding($x,"SJIS-WIN","UTF-8")), 4 "UTF-8","SJIS-WIN"); 5echo "1234567890123456789012345678901234567890\n"; 6echo $y."!\n";
コードでは、Shift_JISより若干使える文字が多いSJIS-WIN(Windows-31J:WindowsのシフトJISの拡張版)にしてます。
Windows-31Jにない文字も扱いたいなら面倒でわかりにくいプログラムになると思います。
投稿2024/09/13 13:56
編集2024/09/13 16:16総合スコア86385
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
半角で40文字
全角の場合はどの様にするのでしょうか?
とりあえず、全角半角問わず(=英数も含む)40文字であるとします。
こんな感じでも実現できます。
PHP
1$limit = 40; 2$src = 'テストテストテ'; 3var_dump(mb_substr($src . str_repeat(' ', $limit), 0, $limit));
ですが...
どれも固定数を追加などで自分の求めているものに行きついていません。
参照先の最後に mb_str_pad() についての記述がありますが、これは期待に副うモノではありませんか?
__PHP8.3以上なら関数定義は不要(公式に取り込まれた)
__https://www.php.net/manual/ja/function.mb-str-pad.php
投稿2024/09/13 12:34
総合スコア443
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/09/14 01:27 編集