【PHP8.x】str_rot13関数の使い方
str_rot13関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
str_rot13関数は、指定された文字列に対してROT13(Rotate by 13 places)エンコーディングを実行する関数です。これは、アルファベット文字を13文字分シフトさせて難読化を行うもので、例えばAがNに、NがAになるような相互変換であり、大文字小文字両方に対応します。
非アルファベット文字(数字、記号、スペースなど)は変更されず、元のまま維持されます。この変換は完全に可逆的であり、同じ関数を2回適用すると元の文字列に正確に戻ります。
引数として渡された文字列を変換し、その結果を返します。主に、スパムボットからの保護を目的とした電子メールアドレスの簡単な難読化や、ごく軽い情報隠蔽に利用されます。PHP 8でも、この文字列操作機能は標準で提供されており、変更なく利用可能です。
構文(syntax)
1<?php 2echo str_rot13("Hello PHP"); 3?>
引数(parameters)
string $string
- string $string: ROT13エンコードを適用する対象の文字列
戻り値(return)
string
引数で渡された文字列の各アルファベットを、ROT13(シーザー暗号の一種)によって変換した新しい文字列を返します。
サンプルコード
PHP: str_rot13 による文字列のデコード
1<?php 2 3declare(strict_types=1); 4 5/** 6 * str_rot13() を使って文字列をデコード(復号)する例 7 * 8 * ROT13は、アルファベットの文字を13文字分ずらす単純な換字式暗号です。 9 * 特徴として、同じ関数を2回適用すると元の文字列に戻るため、 10 * エンコード(暗号化)とデコード(復号)に同じ関数が使われます。 11 */ 12function decodeRot13Example(): void 13{ 14 // ROT13でエンコードされた文字列 15 $encodedString = 'Guvf vf n frperg zrffntr.'; 16 17 echo 'エンコードされた文字列: ' . $encodedString . PHP_EOL; 18 19 // str_rot13() を使ってデコード(復号)する 20 $decodedString = str_rot13($encodedString); 21 22 echo 'デコードされた文字列: ' . $decodedString . PHP_EOL; 23} 24 25// 関数を実行してデコードの例を表示します 26decodeRot13Example(); 27 28?>
PHPのstr_rot13関数は、文字列を特定のルールで変換する機能を提供します。これは「ROT13」と呼ばれる、アルファベットの文字を13文字分ずらす単純な換字式暗号方式に基づいており、セキュリティを目的としたものではなく、主に文字列のちょっとした隠蔽や特定の文脈での利用が想定されています。
この関数の特徴は、同じ関数を2回適用すると元の文字列に戻る点です。そのため、文字列を暗号化(エンコード)する際も、その暗号化された文字列を元に戻す(デコード)際も、同じstr_rot13関数を利用します。
サンプルコードでは、ROT13でエンコードされた文字列「Guvf vf n frperg zrffntr.」を変数$encodedStringに格納しています。str_rot13関数に引数としてstring $string型の$encodedStringを渡すと、関数はROT13のルールに従って各アルファベットを逆方向に13文字ずらし、元の文字列「This is a secret message.」にデコードされた新しいstring型の文字列を戻り値として返します。このように、str_rot13関数は与えられた文字列の各アルファベットを変換し、新しい文字列を返すシンプルな機能を提供します。
str_rot13関数は、アルファベットの文字を13文字分ずらす単純な変換機能を提供します。この関数はセキュリティ目的の本格的な暗号ではありませんので、個人情報やパスワードなどの機密情報を保護するためには絶対に使用しないでください。主にインターネット掲示板などでの軽いネタバレ防止といった、一時的な目隠し用途に限定されます。
この関数の大きな特徴は、エンコード(暗号化)とデコード(復号)の両方に同じ関数を使用できる点です。同じ文字列に対して2回適用すると元の文字列に戻ります。また、ROT13はアルファベット(A-Z, a-z)のみを対象とします。日本語のようなマルチバイト文字や数字、記号などは変換されずにそのまま出力されますのでご注意ください。PHP 8では、declare(strict_types=1);が有効な場合、引数に文字列以外の型を渡すとTypeErrorが発生します。