【PHP8.x】Dom\TokenList::add()メソッドの使い方
addメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
addメソッドは、Dom\TokenListオブジェクトが表すトークンのリストに、1つまたは複数の新しいトークンを追加するために実行するメソッドです。Dom\TokenListは、主にHTML要素のclass属性のように、スペースで区切られた文字列の集合を便利に操作するためのオブジェクトです。このaddメソッドを使用することで、指定した要素のclass属性に新しいクラス名などをプログラム的に簡単に追加できます。引数には、追加したいトークンを文字列として1つ、またはカンマで区切って複数を指定することが可能です。もし、引数で指定したトークンがリスト内に既に存在していたとしても、重複して追加されることはありません。そのため、現在の状態を気にすることなく、安全にトークンを追加する操作を実行できます。このメソッドはDom\TokenListオブジェクトの状態を直接変更するものであり、処理結果として特定の値を返すことはありません。
構文(syntax)
1public function Dom\TokenList::add(string ...$tokens): void
引数(parameters)
string ...$tokens
- string ...$tokens: 追加したいトークンを可変長引数として指定する文字列
戻り値(return)
void
このメソッドは、指定されたトークンをリストに追加します。 戻り値はありません。
サンプルコード
PHP addcslashes で文字列をエスケープする
1<?php 2 3/** 4 * addcslashes() 関数の使用例を示します。 5 * この関数は、文字列中の指定した文字の前にバックスラッシュを追加(エスケープ)します。 6 * 7 * @see https://www.php.net/manual/ja/function.addcslashes.php 8 */ 9function demonstrateAddcslashes(): void 10{ 11 // エスケープ対象の元の文字列 12 $originalString = "Hello, world! Let's learn PHP from A to Z."; 13 echo "元の文字列:" . PHP_EOL; 14 echo $originalString . PHP_EOL . PHP_EOL; 15 16 // --- 例1: 特定の文字をエスケープ --- 17 // 第2引数でエスケープしたい文字を指定します。 18 // ここでは、小文字の母音 'a', 'e', 'i', 'o', 'u' をエスケープします。 19 $escapedVowels = addcslashes($originalString, 'aeiou'); 20 echo "例1: 小文字の母音をエスケープ:" . PHP_EOL; 21 echo $escapedVowels . PHP_EOL . PHP_EOL; 22 23 // --- 例2: 文字の範囲を指定してエスケープ --- 24 // '..' を使うと、ASCIIコードにおける文字の範囲を指定できます。 25 // ここでは、大文字アルファベット 'A' から 'Z' までをエスケープします。 26 $escapedUpperCase = addcslashes($originalString, 'A..Z'); 27 echo "例2: 大文字アルファベット (A-Z) をエスケープ:" . PHP_EOL; 28 echo $escapedUpperCase . PHP_EOL . PHP_EOL; 29 30 // --- 例3: 複数の文字と範囲を組み合わせてエスケープ --- 31 // 小文字アルファベット 'a' から 'z' までと、感嘆符 '!' をエスケープします。 32 $escapedLowerCaseAndMark = addcslashes($originalString, 'a..z!'); 33 echo "例3: 小文字アルファベット (a-z) と '!' をエスケープ:" . PHP_EOL; 34 echo $escapedLowerCaseAndMark . PHP_EOL; 35} 36 37// 関数を実行してデモを表示します 38demonstrateAddcslashes();
addcslashes()関数は、第一引数に与えられた文字列に対し、第二引数で指定された条件に一致する文字の前にバックスラッシュ「\」を追加(エスケープ)する機能を提供します。処理が完了すると、バックスラッシュが追加された新しい文字列を返します。元の文字列自体が変更されることはありません。
第一引数には、処理対象となる元の文字列を渡します。サンプルコードでは、変数 $originalString がこれに該当します。
第二引数には、どの文字をエスケープ対象にするかを文字列で指定します。この指定方法は柔軟です。サンプルコードの例1のように、エスケープしたい文字('aeiou')を直接並べて指定できます。また、例2のように「'A'..'Z'」という形式を用いると、ASCIIコードにおける文字の範囲をまとめて指定することが可能です。さらに例3では、範囲指定('a..z')と個別の文字('!')を組み合わせて、複数のルールを一度に適用しています。
このように addcslashes()関数は、特定の文字や文字範囲を柔軟に指定して、文字列をエスケープしたい場面で役立ちます。
addcslashes関数は指定した文字をエスケープする際に便利ですが、注意が必要です。この関数はバイト単位で処理を行うため、UTF-8のようなマルチバイト文字、例えば日本語を含む文字列に使用すると、文字が分割されて文字化けを起こす可能性があります。また、文字の範囲指定(例: 'A..Z')はASCIIコードの順序に基づくため、日本語の範囲指定には利用できません。最も重要な点として、この関数をSQLインジェクション対策に使うのは非常に危険です。データベースを安全に扱うためには、プリペアドステートメントや各データベース専用のエスケープ関数を使用してください。用途に応じて適切な関数を選ぶことがセキュリティの基本です。
addslashes()で文字列をエスケープする
1<?php 2 3/** 4 * addslashes() 関数の使用例を示すクラス 5 */ 6class AddslashesExample 7{ 8 /** 9 * 文字列中の特定の文字をバックスラッシュでエスケープする例を実行します。 10 * 11 * addslashes()は、シングルクォート(')、ダブルクォート(")、 12 * バックスラッシュ(\)、NUL(NULL文字)の前にバックスラッシュを追加します。 13 * 14 * @return void 15 */ 16 public static function demonstrate(): void 17 { 18 // 1. エスケープ対象の文字列を定義します。 19 $originalString = "It's a value with 'single' and \"double\" quotes."; 20 21 // 2. addslashes() を使って文字列をエスケープします。 22 $escapedString = addslashes($originalString); 23 24 // 3. 元の文字列とエスケープ後の文字列を出力して比較します。 25 echo "元の文字列:\n"; 26 echo $originalString . "\n\n"; 27 28 echo "addslashes() 適用後の文字列:\n"; 29 echo $escapedString . "\n"; 30 } 31} 32 33// クラスのメソッドを呼び出してサンプルを実行します。 34AddslashesExample::demonstrate();
このサンプルコードは、PHPのaddslashes()関数の使用方法を解説するものです。この関数は、引数として渡された文字列に含まれる特定の文字をエスケープします。エスケープとは、プログラム上で特別な意味を持つ文字の前に記号(この場合はバックスラッシュ)を追加し、単なる文字として扱えるようにする処理のことです。addslashes()関数が対象とする文字は、シングルクォート(')、ダブルクォート(")、バックスラッシュ(\)、そしてNUL(ヌル文字)の4種類です。引数にはエスケープしたい文字列を一つ指定します。処理が成功すると、戻り値としてエスケープされた新しい文字列が返されます。元の文字列は変更されません。サンプルコードでは、クォートを含む文字列をaddslashes()で処理し、元の文字列と処理後の文字列を比較して出力しています。実行結果を見ると、It'sの'がIt\'sに、"double"の"が\"double\"に変換されており、正しくエスケープされていることが確認できます。
addslashes()関数は、特定の文字をエスケープしますが、使い方には重要な注意点があります。かつてはデータベースへ渡す文字列のエスケープによく使われていましたが、現在この目的での使用はセキュリティ上のリスクから強く非推奨とされています。文字エンコーディングによってはSQLインジェクション脆弱性の原因となる可能性があるためです。データベースを安全に操作するには、この関数の代わりにPDOやMySQLiが提供するプリペアドステートメントを利用してください。プリペアドステートメントは値を安全に扱うための仕組みであり、手動でのエスケープ処理が不要になるため、より堅牢なアプリケーションを開発できます。