PHP:字符串作为代码/数组?

PHP:字符串作为代码/数组?,php,arrays,string,php-5.3,Php,Arrays,String,Php 5.3,如何使字符串充当代码 例如,我希望将此字符串解析为数组 $config = ' "allowable_tags" => "<p>", "span_regex" => null, "allow_nbsp" => true, "allow_class" => false '; 然后我会得到这个结果 <p> 与其使用自定义函数将配置变量的字符串表示形式解析为数组,为什么不使用JSON等现有格式呢?然后,您可以简单地

如何使字符串充当代码

例如,我希望将此字符串解析为数组

$config = '
    "allowable_tags" => "<p>",
    "span_regex" => null, 
    "allow_nbsp" => true, 
    "allow_class" => false
';
然后我会得到这个结果

<p>

与其使用自定义函数将配置变量的字符串表示形式解析为数组,为什么不使用JSON等现有格式呢?然后,您可以简单地调用并获取一个数组。此外,如果这是针对用户提交/输入的配置值的,那么它是众所周知的、易于学习的,并且由于不执行任何代码而具有一定的安全性。

与其使用自定义函数将配置变量的字符串表示形式解析为数组,为什么不使用JSON等现有格式呢?然后,您可以简单地调用并获取一个数组。另外,如果这是针对用户提交/输入的配置值,那么它是众所周知的、易于学习的,并且由于不执行代码而有些安全。

首先如何获取该字符串

我猜您正在将配置存储在数据库或其他地方。在这种情况下,您应该使用序列化,PHP为其内置了方法

<?php

// normal PHP array
$config = array(
    "allowable_tags" => "<p>",
    "span_regex" => null, 
    "allow_nbsp" => true, 
    "allow_class" => false
);

// array serialized as string
$string = serialize($config);

echo $string ."\n\n";
# => a:4:{s:14:"allowable_tags";s:3:"<p>";s:10:"span_regex";N;s:10:"allow_nbsp";b:1;s:11:"allow_class";b:0;}

// converting serialized string back to array
$array = unserialize($string);

print_r($array);
/*
    Array
    (
        [allowable_tags] => <p>
        [span_regex] => 
        [allow_nbsp] => 1
        [allow_class] => 
    )
*/

首先,您是如何获得该字符串的

我猜您正在将配置存储在数据库或其他地方。在这种情况下,您应该使用序列化,PHP为其内置了方法

<?php

// normal PHP array
$config = array(
    "allowable_tags" => "<p>",
    "span_regex" => null, 
    "allow_nbsp" => true, 
    "allow_class" => false
);

// array serialized as string
$string = serialize($config);

echo $string ."\n\n";
# => a:4:{s:14:"allowable_tags";s:3:"<p>";s:10:"span_regex";N;s:10:"allow_nbsp";b:1;s:11:"allow_class";b:0;}

// converting serialized string back to array
$array = unserialize($string);

print_r($array);
/*
    Array
    (
        [allowable_tags] => <p>
        [span_regex] => 
        [allow_nbsp] => 1
        [allow_class] => 
    )
*/

我认为这并不理想,但它有一定的基础:

function str2array($str)
{
    $array = explode(',', $str);
    $rArray = array();
    foreach ($array as $items) {
        $i = explode('=>', $items);
        if (preg_match('/^"*(.*?)"$/', trim($i[1]), $iWithoutQuotes)) {
            $i[1] = $iWithoutQuotes[1];
        }
        $rArray[substr(trim($i[0]), 1, -1)] = trim($i[1]);
    }

    return $rArray;
}

我认为这并不理想,但它是有一定基础的:

function str2array($str)
{
    $array = explode(',', $str);
    $rArray = array();
    foreach ($array as $items) {
        $i = explode('=>', $items);
        if (preg_match('/^"*(.*?)"$/', trim($i[1]), $iWithoutQuotes)) {
            $i[1] = $iWithoutQuotes[1];
        }
        $rArray[substr(trim($i[0]), 1, -1)] = trim($i[1]);
    }

    return $rArray;
}

你可以将数组作为参数传递给函数,但我看不到问题所在。你可以将数组作为参数传递给函数,但我看不到问题所在。请不要让他使用这种错误做法。PHP有几个现有函数可以满足他的目的。@macek是的。我在为他做一个活动。我不喜欢他能用json或xml之类的东西。请不要让他使用这种糟糕的做法。PHP有几个现有函数可以满足他的目的。@macek是的。我在为他做一个活动。我不喜欢他能用json或xml什么的。谢谢。我在想这个!我只是认为php5.4中的数组几乎类似于json,所以可以使用php数组。但是我认为json对于这个案例更容易,谢谢@lauthiamkok,没错,在PHP5.4中有一些新的数组结构,它们的工作方式类似于json,但是要从字符串(用户输入、数据库或非php文件)开始,您需要对其求值,它将执行字符串中的任何代码。至少对于json和json_解码,在解码过程中不会执行代码。谢谢。我在想这个!我只是认为php5.4中的数组几乎类似于json,所以可以使用php数组。但是我认为json对于这个案例更容易,谢谢@lauthiamkok,没错,在PHP5.4中有一些新的数组结构,它们的工作方式类似于json,但是要从字符串(用户输入、数据库或非php文件)开始,您需要对其求值,它将执行字符串中的任何代码。至少对于json和json_decode,在解码过程中不会执行代码。
首先如何获取该字符串?
该字符串将来自用户输入。我正在努力使代码更易于用户输入。但我认为json是这方面最好的解决方案。谢谢。
您首先是如何获得该字符串的?
该字符串将来自用户输入。我正在努力使代码更易于用户输入。但我认为json是这方面最好的解决方案。谢谢