多くの特殊文字を含む文字列を出力する PHP に関する問題
エコーを使用して次の文字列を出力したいと考えています
a:4:{s:8:"collects";a:0:{}s:8:"comments "; a:0:{}
エコー 'a:4:{s:8:"収集";a:0:{}s:8:"コメント";a:0:{}' ;
これは絶対に不可能です
出力される文字列が複数の文になるため、特殊文字を 1 つずつ処理する必要があり、非常に面倒です。
ツールやソフトウェアを使用すると、文字列を直接入力すると、echo
------ で直接使用できるコードがすぐに生成されます。解決策 --------------------
echo <<
EOF;
-----解決策---------
連載ですか?
unserialize – 保存された表現から PHP 値を作成します 説明する 混合アンシリアル化 ( string $str [, string $callback ] ) unserialize() は単一のシリアル化された変数を操作し、それを PHP 値に変換し直します。返されるのは変換された値で、整数、浮動小数点、文字列、配列、またはオブジェクトのいずれかになります。渡された文字列が逆シリアル化できない場合は FALSE を返します。 注: unserialize_callback_func ディレクティブ 逆シリアル化中に未定義のクラスをインスタンス化する必要がある場合は、呼び出されるコールバック関数を設定できます (不完全なオブジェクト「__PHP_Incomplete_Class」の取得を避けるため)。 「unserialize_callback_func」は、php.ini、ini_set()、または .htaccess を介して定義できます。未定義のクラスがインスタンス化されるたびに呼び出されます。この機能を無効にするには、この設定を空白のままにしておきます。また、unserialize_callback_func ディレクティブは PHP 4.2.0 以降で利用可能になったことにも注意してください。 注記: コールバックパラメータはPHP 4.2.0で追加されました。 逆シリアル化される変数がオブジェクトの場合、PHP はオブジェクトの再構築に成功した後、自動的に __wakeup() メンバー関数 (存在する場合) の呼び出しを試みます。 例1 unserialize_callback_func の例 <?php $serialized_object='O:1:"a":1:{s:5:"値";s:3:"100";}'; // unserialize_callback_func は PHP 4.2.0 以降で利用可能 ini_set('unserialize_callback_func','mycallback'); // コールバック関数を設定します。 関数 mycallback($classname) { // クラス定義を含むファイルをインクルードするだけです // $classname はどのクラスが必要かを示します } ?> 注記: PHP 3 では、オブジェクトを逆シリアル化するときにメソッドは保存されません。 PHP 4 ではこの制限がなくなり、プロパティとメソッドが同時に保存されます。詳細については、「クラスとオブジェクト」の「シリアル化されたオブジェクト」セクションを参照してください。 例2 unserialize() の例 <?php // ここでは、unserialize() を使用して、データベースから $session_data 配列にセッション データをロードします。 // この例は、serialize() を説明した例に追加されたものです。 $conn = odbc_connect ("webdb", "php", "chicken"); $stmt = odbc_prepare ($conn, "SELECT データ FROM セッション WHERE id = ?"); $sqldata = 配列 ($PHP_AUTH_USER); if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) { // 実行エラーが発生した場合、またはエラーが返された場合は、空の配列に初期化します $セッションデータ = 配列(); } それ以外 { // ここで必要なのは、$tmp[0] 内のシリアル化されたデータです。 $session_data = アンシリアル化 ($tmp[0]); if (!is_array ($session_data)) { // エラー、空の配列に初期化される $セッションデータ = 配列(); } } ?> 「serialize()」を参照してください。 シリアライズ – 値の保存可能な表現を生成します 説明する 文字列シリアル化 (混合 $value) Serialize() は、値を表すバイト ストリームを含む文字列を返し、どこにでも保存できます。 これにより、型や構造を失うことなく、PHP 値の保存や受け渡しが容易になります。 シリアル化された文字列を PHP 値に変換するには、unserialize() を使用します。 Serialize() はリソース以外の任意の型を処理できます。それ自体への参照を含む配列を Serialize() することもできます。 Serialize() している配列/オブジェクト内の参照も保存されます。 オブジェクトをシリアル化するとき、PHP はシーケンス アクションの前にオブジェクトのメンバー関数 __sleep() の呼び出しを試みます。これにより、オブジェクトがシリアル化される前にクリーンアップ操作を実行できるようになります。同様に、unserialize() を使用してオブジェクトが復元されると、__wakeup() メンバー関数が呼び出されます。 注記: PHP 3 では、オブジェクトのプロパティはシリアル化されますが、メソッドは失われます。 PHP 4 ではこの制限がなくなり、プロパティとメソッドの両方を保存できるようになりました。詳細については、「クラスとオブジェクト」の「シリアル化されたオブジェクト」セクションを参照してください。 例1 Serialize() の例 <?php // $session_data は、現在のユーザー セッション情報を含む多次元配列です。 // リクエストが終了する前に、serialize() を使用してデータベースにリクエストを保存します。 $conn = odbc_connect ("webdb", "php", "chicken"); $stmt = odbc_prepare ($conn, "UPDATE セッション SET データ = ? WHERE id = ?"); $sqldata = 配列 (serialize($session_data), $PHP_AUTH_USER); if (!odbc_execute ($stmt, &$sqldata)) { $stmt = odbc_prepare($conn, "INSERT INTO セッション (id, データ) VALUES(?, ?)"); if (!odbc_execute($stmt, &$sqldata)) { /* エラー */ } } ?><div class="clear"></div>