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是这方面最好的解决方案。谢谢