目次
2。位置のプレースホルダーとの議論の並べ替え
3。パディングとアライメント(左/右正当化)
4。配列を使用してvsprintf使用する(動的フォーマット)
5。ラッパー関数を介してプレースホルダーに指名されました
6.エラー処理とデバッグのヒント
最終的な考え
ホームページ バックエンド開発 PHPチュートリアル 「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法

Jul 27, 2025 am 04:29 AM
PHP Strings

sprintfとvsprintfは、PHPで高度な文字列フォーマット関数を提供します。回答は次のとおりです。1。浮動小数点精度と%dは%.2fを介して制御でき、dで整数型を確保でき、dでゼロパディングを実現できます。 2。%1 $ sや%2 $ dなどの位置的プレースホルダーは、国際化に便利な可変位置に固定できます。 3.左アライメントと]右アライメントは、テーブルまたはログ出力に適した%-10Sで達成できます。 4。VSPRINTFは、SQLまたはメッセージテンプレートの動的生成を容易にするアレイパラメーターをサポートします。 5.元の名前のプレースホルダーはありませんが、{name}構文は通常のコールバック関数を介してシミュレートするか、extract()と組み合わせて連想配列を使用できます。 6.プレースホルダーの数は、パラメーターの不一致を回避するためにsubstr_countを介してチェックし、保守性を向上させるためにVSPRINTFをバリアード関数にカプセル化する必要があります。

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法

PHPで文字列を使用する場合、 sprintfvsprintf 、フォーマットされた出力を作成するための強力なツールです。基本的な文字列の連結はジョブを完了させますが、これらの関数は、特に動的なコンテンツ、ローカリゼーション、または複雑なフォーマットを扱うときに、よりクリーンで読みやすく、より安全な方法を文字列に挿入するためのより安全な方法を提供します。

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法

sprintfvsprintfを使用して、単純なプレースホルダーの交換を超えて、高度な技術を調べてみましょう。


1。精密制御とデータ型のフォーマット

sprintfの最も有用な機能の1つは、異なるデータ型を正確にフォーマットする機能です。

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法
 $価格= 19.9;
$数量= 3;
$合計= $価格 * $数量;

Echo Sprintf( "合計:$%。2f(数量:%d)"、$合計、$数量);
//出力:合計:$ 59.70(数量:3)

ここ:

  • %.2fは、ちょうど2つの小数の場所でフロートをフォーマットします。
  • %d整数が使用されることを保証します(入力の消毒に役立ちます)。

その他の一般的なタイプの仕様:

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法
  • %s - 文字列
  • %f - フロート
  • %u - 署名されていない整数
  • %x - 16進数(小文字)
  • %X - ヘキサデシマル(大文字)
  • %e - 科学表記

パッド番号をパッドすることもできます。

 Echo Sprintf( "ユーザーID:D"、42); //出力:ユーザーID:000042

06 、「少なくとも6桁、ゼロ付きのパッド」を意味します。


2。位置のプレースホルダーとの議論の並べ替え

国際化または複雑なテンプレートを扱う場合、引数の順序は言語によって異なる場合があります。変数がどこに行くかをロックするには%1$s%2$sなどの位置指定子を使用します。

 $ name = "Alice";
$ age = 30;

Echo Sprintf( "Hello%1 $ s、あなたは%2 $ d歳です。"、$ name、$ age);
//出力:こんにちはアリス、あなたは30歳です。

//変数を変更せずに順序を逆にします
Echo Sprintf( "age:%2 $ d、name:%1 $ s"、$ name、$ age);
//出力:年齢:30、名前:アリス

これは、言語間で語順の違いがある翻訳システムに不可欠です。


3。パディングとアライメント(左/右正当化)

表形式の出力またはクリーンログの間隔とアライメントを制御します。

 printf( "%-10s%5s \ n"、 "name"、 "score"); //ヘッダー
printf( "%-10s] \ n"、 "Alice"、95);
printf( "%-10s] \ n"、 "bob"、87);

出力:

名前スコア
アリス95
ボブ87
  • %-10s :10文字の広いフィールドにある左アライメント文字列
  • ] :5文字のフィールドで右整列した整数

レポートまたはCLI出力の生成に役立ちます。


4。配列を使用してvsprintf使用する(動的フォーマット)

配列に変数データがある場合(例えば、ループや構成から)、 vsprintfを使用すると、 sprintfロジックを一連の引数に適用できます。

 $ template = "ユーザーに挿入(名前、電子メール、年齢)値( '%s'、 '%s'、%d);";
$ data = ["john doe"、 "john@example.com"、25];

$ query = vsprintf($ template、$ data);
echo $ query;
// output:inserting insorting users(name、email、age)values( 'john doe'、 'john@example.com'、25);

これは次の場合に役立ちます

  • SQLクエリの構築(実際のアプリで準備されたステートメントを使用してください!)
  • ログテンプレートの処理
  • 構造化されたデータからフォーマットされたメッセージを生成します

⚠️注:脱出または準備されたステートメントなしで、これを実際のSQLクエリに使用しないでください。これはイラストのためだけです。


5。ラッパー関数を介してプレースホルダーに指名されました

PHPは、 %(name)sのような名前のプレースホルダーをネイティブにサポートしていませんが、シミュレートできます。

関数形式($ format、$ data){
    $ formatted = preg_replace_callback( '/\ {(\ w)\}/'、function($ matches)use($ data){
        $ key = $ matches [1];
        ISSETを返します($ data [$ key])? $ data [$ key]:$ matches [0];
    }、$ format);

    $フォーマットを返します。
}

Echo Format( "hello {name}、あなたは{age} yed yed gry gry。"、[
    'name' => 'Charlie'、
    「年齢」=> 33
]);
//出力:こんにちはチャーリー、あなたは33歳です。

sprintfを直接使用していませんが、このアイデアとvsprintf組み合わせることで、パワーと読みやすさの両方が得られます。

または、 sprintf関連する配列抽出と混合します。

 $ data = ['product' => 'ラップトップ'、 '価格' => 1299.99];
抽出($ data);
Echo Sprintf( "Product:%S、Price:$%。2F"、$ Product、$ Price);

extract()慎重に使用します。既存の変数を上書きすることができます。


6.エラー処理とデバッグのヒント

sprintf例外を投げませんが、不一致のプレースホルダーは警告またはサイレントの障害を引き起こします。

 //これにより警告がトリガーされます
sprintf( "hello%s%s"、 "Alice");
//警告:sprintf():引数が少なすぎます

問題を回避するため:

  • カウントプレースホルダー: substr_count($format, '%')
  • 一貫したデータ構造を使用します
  • カスタムフォーマッタで使用する場合は、トライキャッチにラップします

また、variadicヘルパー関数内でvsprintfを使用することを検討してください。

関数buildlog(... $ args){
    $ template = array_shift($ args);
    return vsprintf($ template、$ args);
}

echo buildlog( "%sでip%sからログインしたユーザー%s"、 "alice"、 "192.168.1.1"、date( 'h:i'));

最終的な考え

sprintfvsprintf 、基本的な文字列補間をはるかに超えています。フォーマットコード、位置引数、パディング、アレイベースの入力を適切に使用すると、クリーン、予測可能、保守可能な文字列出力を生成できます。

彼らは特に価値があります:

  • ロギング
  • レポート生成
  • テンプレートシステム
  • 国際化(I18N)

覚えておいてください:強力ですが、常に出力がセキュリティまたはユーザーエクスペリエンスに影響する場合、常に入力カウントを検証し、データを消毒します。

基本的に、単純な連結を過ぎて移動すると、 sprintf構造化された文字列のフォーマットの親友になります。

以上が「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでのヌルバイトと文字列終端で一般的な落とし穴を解決する PHPでのヌルバイトと文字列終端で一般的な落とし穴を解決する Jul 28, 2025 am 04:42 AM

nullbytes(\ 0)cancaunextectedbehaviorinphpの場合、interfacingsostensionsustentionSystemcallsbecausectreats \ 0asaStringSarebinary-safeand-preseverfullent.2.infileoperations、infileoperations、infeNamesconteainingnullbyteslike "

バリューオブジェクトとしての文字列:ドメイン固有の文字列タイプへの最新のアプローチ バリューオブジェクトとしての文字列:ドメイン固有の文字列タイプへの最新のアプローチ Aug 01, 2025 am 07:48 AM

rawStringsindomain-drivenApplicationsは、ValueObjedStopReventBugsAndimproveTypeTytyのValueObue obue obue obtedsopreated; 1. 1.SustoprimiteObsessionを使用します

「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法 「sprintf」と「vsprintf」を使用した高度な文字列フォーマット手法 Jul 27, 2025 am 04:29 AM

sprintfとvsprintfは、PHPで高度な文字列フォーマット関数を提供します。回答は次のとおりです。1。浮動小数点精度と%dは%.2fを介して制御でき、dで整数型を確保でき、dでゼロパディングを実現できます。 2.変数位置は、%1 $ sや%2 $ dなどの位置的プレースホルダーを使用して修正できます。これは、国際化に便利です。 3.左アライメントと]右アライメントは、テーブルまたはログ出力に適した%-10Sで達成できます。 4。VSPRINTFは、SQLまたはメッセージテンプレートの動的生成を容易にするアレイパラメーターをサポートします。 5.元の名前のプレースホルダーはありませんが、{name}構文は通常のコールバック関数を介してシミュレートできます。または、extract()と組み合わせて連想配列を使用できます。 6。Substr_Co

防御的な文字列の取り扱い:PHPでのXSSと噴射攻撃の防止 防御的な文字列の取り扱い:PHPでのXSSと噴射攻撃の防止 Jul 25, 2025 pm 06:03 PM

todefendagainstxssandinjectionInphp:1

PHP文字列エンコードの迷路をナビゲートする:UTF-8以降 PHP文字列エンコードの迷路をナビゲートする:UTF-8以降 Jul 26, 2025 am 09:44 AM

PHPはデフォルトでUnicodeをサポートしていないため、UTF-8処理はPHPで手動で管理する必要があります。 1. MBSTRING拡張機能を使用して、MB_STRLEN、MB_SUBSTRなどのマルチバイトセキュリティ関数を提供し、UTF-8エンコーディングを明示的に指定します。 2.データベース接続がUTF8MB4文字セットを使用していることを確認します。 3. HTTPヘッダーとHTMLメタタグを介してUTF-8を宣言します。 4.ファイルの読み取りと書き込み中にエンコードを確認および変換します。 5. JSON処理前にデータがUTF-8であることを確認します。 6.検出と変換をエンコードするには、MB_DETECT_ENCODINGとICONVを使用します。 7.データの腐敗を防ぐことは、後の修理よりも優れており、UTF-8をすべてのレベルで使用して、コードの問題を避けるために使用する必要があります。

PHPのPCRE関数と一致する高度なパターン PHPのPCRE関数と一致する高度なパターン Jul 28, 2025 am 04:41 AM

PHPのPCRE関数は、高度な通常の機能をサポートしています。 2。ポジティブ/ネガティブな先制のアサーション(?=)および(?!)および発行後のアサーション(???)および発行後のアサーション(??

JSONを超えて:PHPのネイティブストリングシリアル化の理解 JSONを超えて:PHPのネイティブストリングシリアル化の理解 Jul 25, 2025 pm 05:58 PM

PHPのネイティブシリアル化は、JSONよりもPHPの内部データストレージと送信により適しています1。完全なデータ型(int、float、boolなど)を保持できるため。 2。プライベートおよび保護されたオブジェクトプロパティをサポートします。 3.再帰的な参照を安全に処理できます。 4.脱介入中に手動タイプの変換は必要ありません。 5.通常、パフォーマンスはJSONよりも優れています。ただし、言語間のシナリオで使用するべきではなく、リモートコード実行攻撃のトリガーを避けるために、信頼されていない入力のためにUnserialize()を呼び出さないでください。 PHP環境に限定されており、高忠実度データが必要な場合に使用することをお勧めします。

バイナリデータの開梱:PHPの `pack()`および `unpack()`の実用的なガイド バイナリデータの開梱:PHPの `pack()`および `unpack()`の実用的なガイド Jul 25, 2025 pm 05:59 PM

PHPのpack()およびunpack()関数は、PHP変数とバイナリデータ間の変換に使用されます。 1.Pack()パッケージ整数や文字列などの変数はバイナリデータになり、Unpack()はバイナリデータをPHP変数に解凍します。どちらもフォーマット文字列に依存して、変換ルールを指定します。 2。一般的な形式コードには、C/C(/unsigned文字を含む8ビット)、S/S(16ビットショート整数)、L/L/V/N(32ビットの長い整数、異なるエンドアンネスに対応)、F/D(フローティングポイント/ダブル精度)、A/A(塗りつぶし文字列)、X(null bute)などが含まれます。大規模なエンディアン(ネットワーク標準)。 vは、プラットフォーム間で通信するときに最初に使用する必要があります。

See all articles