深くネストされたオブジェクト/配列の組み合わせからスラッシュを追加または削除するために使用している2つの関数があります。配列の最初の「レベル」は常にオブジェクトですが、そのプロパティの一部は配列またはオブジェクトである場合があります。
これが私の2つの機能です。
function objSlash( &$obj, $add=true )
{
foreach ( $obj as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$obj->$key = addslashes( $field );
else
$obj->$key = stripslashes( $field );
}
return;
}
function arrSlash( &$arr, $add=true )
{
foreach ( $arr as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$arr[$key] = addslashes( $field );
else
$arr[$key] = stripslashes( $field );
}
return;
}
そのように呼ばれている:
objSlash( $obj, false );
ただし、この関数はネストされた配列からスラッシュを削除しません。関数に渡されるオブジェクトは次のようになります。
stdClass Object
(
[id] => 3
[lines] => Array
(
[0] => Array
(
[character] => Name
[dialogue] => Something including \"quotes\"
)
)
)
私は何を間違えましたか?どこかで参照が失われています...