【问题标题】:PHP Convert string into arrayPHP将字符串转换为数组
【发布时间】:2013-08-12 08:00:53
【问题描述】:

如何转换字符串$string = 'array(array("a"=>"content"))';

array(1) { [0]=> array(1) { ["a"]=> string(7) "content" } }

我要构建一个函数来在线运行序列化:

输入:$string = 'array(array(1))'; echo serialize($string);

结果:a:1:{i:0;a:1:{i:0;i:1;}} 不是 s:16:"array(array(1)))";

您拨打:$returnValue = serialize('array(array(1))');

【问题讨论】:

  • 我的问题是为什么你首先有这样一个字符串?
  • 请提供更多上下文。当您已经知道 eval 不安全且不是解决方案时,您有两个人回答 eval。不要浪费人们的时间来建议你从一开始就排除的事情。请注意stackoverflow.com/questions/ask-advice 中的“具体”部分
  • @Gordon:我在上面更新了更多信息。

标签: php arrays string converter


【解决方案1】:

你/可以/使用eval():

$string = 'array(array("a"=>"content"))';
eval("\$array = $string;");
print_r($array);

输出:

Array
(
    [0] => Array
        (
            [a] => content
        )

)

但如果您接受用户输入,则不应使用eval()

另外,请考虑改用json_encode() / json_decode()

或者,要将数组存储在字符串中,您可以使用 serializeunserialize

【讨论】:

  • 如果 $string 从 $_POST 获取数据,例如: $string = $_POST['string'];像这样: $string = 'array(array("a"=>"content")); die("HACK: 在此之前添加更多功能")'; eval("\$array = $string;"); print_r($array);
  • 如果使用 eval() $string = 'array(array("a"=>"content")); die("HACK: add more functions before this")'; eval("\$array = $string;"); print_r($array);,我仍然会破解 输出: HACK: add more functions before this
  • @Truongnq 如果您从外部获取字符串,您应该编写一个解析器。就 JSON 之类的更简单的东西达成一致可能会更好。
  • @Truongnq:正如我在答案中提到的,如果涉及接受用户输入,则不应使用 eval。如果您在问题中提到您不想使用 eval,那就太好了。无论如何,我已经提出了替代方案 - 你可能想检查一下。 :-)
  • @AmalMurali:我可以看到您的更新答案。你能解释更多吗。谢谢!
【解决方案2】:

评价?检查http://php.net/manual/en/function.eval.php

注意手册显示的注意事项...

【讨论】:

  • 当我只公开这种功能时,eval 不是安全的。我试过了,在使用 eval 时破解了它。
  • 我试过了:$reg_exp = "/array(*.*)/"; $subject ="array(array(1=>'123'))"; $result = preg_split($reg_exp,$subject); var_dump($result); 输出: array(2) { [0]=> string(0) "" [1]=> string(0) "" } 但这不正确。请帮忙!
猜你喜欢
  • 2018-01-29
  • 2021-12-27
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2013-05-12
  • 2013-04-27
  • 2016-04-28
相关资源
最近更新 更多