2

配列内のユーザー属性のセットを提供するID管理システム(SAML2.0ベース)から配列が渡されています。

IDプロバイダーがこのデータの構造を構成し、私はこれ(はるかに大規模な会社)にサービスを提供しています。この配列を受け取る方法を変更することは、私の管理下にはありません。

配列はこの形式で私と一緒に到着します(これは私が配列である場合に私が見るものですprint_r):

Array
(
[http://longurl/surname] => Array ([0] => Smith)
[http://longurl/firstname] => Array ([0] => John)
);

ご覧のとおり、この配列配列の鍵はURLです(正当な理由があると確信していますか?!)。ただし、この配列を次のように操作しようとすると、次のようになります。

echo 'Hello Mr. '.$SAMLDATA[http://longurl/surname][0];

コロンは変数内の有効な文字ではないため(または私が読んだ)、これは良くありません。

キャラクターのエスケープはうまくいかないようですが、ここで何ができるのでしょうか?どうもありがとう。

4

1 に答える 1

1

PHPの非整数配列キーは文字列であるため、文字列として引用符で囲む必要があります。それらを引用しない場合、定数の代わりに文字列を使用することを想定して、PHPはE_NOTICE未定義の定数について発行します。これらのURLのようなコロンを含む配列キーを使用しようとすると、結果として致命的な構文エラー。

したがって、問題を修正するには、実際には次のように配列キーを正しく引用するだけで済みます。

echo 'Hello Mr. '.$SAMLDATA['http://longurl/surname'][0];

文字列配列キーを引用符で囲まないことが許容される唯一の状況は、二重引用符で囲まれた文字列内で補間される場合であることに注意してください。例えば:

$str = "This double-quoted string has an $array[key] value inside it";

上記のような単純な配列値の場合、二重引用符で囲まれた文字列でキーを引用符で囲む必要はありません。

ただし、あなたの場合、おそらく{}構文を使用して、補間された文字列内のこれらのURLキーの1つにアクセスする必要があります。使用するとき{}文字列配列キーを引用符で囲む必要があります。{}一般的に、読みやすさを向上させるため、配列とオブジェクトの値の構文を使用することを常にお勧めします。

// When using {} enclosures, you do need to quote the key
$str = "This double-quoted string has an {$array['key']} value inside it";

二重引用符で囲まれた文字列の上記の例を取り巻くさまざまなルールは、ここに記載されています。

于 2012-11-27T02:13:31.737 に答える