0

I have a string, which is comes from js using encodeURICompoent(). Now i would like to convert this string into array. I tried my level best to solve this. But i couldn't find any solution to do this. Any help greatly appreciated.

array string = 'array(0=>array("packid"=>22,"pverid"=>18,"yaml"=>"- url: /static
 static_dir: static

- url: .*
  script: provider.py" ),1=>array("packid"=>23,"pverid"=>19,"yaml"=>"- url: /static
  static_dir: static

- url: .*
  script: provider.py" ));';

Thanking you, sureace

5
  • What do you want to extract out of those values? You need to use implode to convert string to array. Commented Jul 23, 2010 at 9:45
  • 1
    It's totally unclear what your string is. So far you have said that the string is JSON.stringified, in YAML format, URL encoded and in PHP array format. What is it?! The question is impossible to answer. Commented Jul 23, 2010 at 10:38
  • What i want is, I am getting json objects from client side to php, which contains encoded data string using javascript encodeURIComponent(). If it contains this data, i am unable to convert this object into array using json_decode() function. jsonstring="{\"packid\":\"22\",\"pverid\":\"18\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.*%0A%20%20script%3A%20provider.py\"},{\"packid\":\"23\",\"pverid\":\"19\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.*%0A%20%20script%3A%20provider.py\"}" Thanking you Commented Jul 23, 2010 at 11:00
  • 1
    Why are you mixing JSON with YAML with PHP arrays? Commented Jul 23, 2010 at 11:33
  • possible duplicate of Safely convert user-provided array string into PHP array?, Convert PHP array string into an array Commented Feb 24, 2012 at 5:59

6 Answers 6

1

It looks like eval should do the job of turning this string into an array.
BUT: You should never, ever use eval, especially with input that you get from external sources, since it opens up a slew of security issues. Instead, you should parse the string by hand, but that's going to be quite a nuisance.

You should find a better way to send the array values, for example via JSON. Especially when sending values from Javascript, this is the usual method.

Sign up to request clarification or add additional context in comments.

4 Comments

doesn't look that way to me.. looks like it would throw an exception at best. Looks like a good bit of the string is missing.
@no I think those newlines are part of the string.
When i am trying look like this, it throws parse errors. $packs = eval($post["packs"]); print_r($packs); Errors ----------- Parse error</b>: syntax error, unexpected $end in eval()'d code</b> on line <b>9
I am using JSON.stringify() jquery plug in method at client side to sending json data.
1

As mentioned by deceze, you can use eval() to turn this string into a PHP array, but whether you should or not is another matter...

$myCodeString = 'array(0=>ar ...... etc.';  // Your coded string

eval('$myArray = '.$myCodeString);
var_dump($myArray);

Which at least returns a valid PHP array:

array(2) {
  [0]=>
  array(3) {
    ["packid"]=>
    int(22)
    ["pverid"]=>
    int(18)
    ["yaml"]=>
    string(71) "- url: /static
 static_dir: static

- url: .*
  script: provider.py"
  }
  [1]=>
  array(3) {
    ["packid"]=>
    int(23)
    ["pverid"]=>
    int(19)
    ["yaml"]=>
    string(72) "- url: /static
  static_dir: static

- url: .*
  script: provider.py"
  }
}

You probably want to parse your "yaml" fields some more...?

3 Comments

"you can use eval()" Don't do it.
Thanks for stressing the point, but I wasn't necessarily saying you should. There seemed to be some debate as to whether this was even technically possible.
This worked great for me. The security issue is only a factor if you don't have control over the data. In my case the array is auto generated and only exposed internal. No need to be paranoid.
0

Have a look at the implode function.

3 Comments

How would implode convert a string into an array?
it wouldn't.. he meant explode, probably.
explode is for converting a delimited string into an array. The coded string in the OP is not a straight forward delimited string.
0

It's very hard to understand what you are asking here.

Do you want to convert a yaml string to an php array? If so, try spyc.

1 Comment

yes, user always giving yaml data in textarea at client side. i am always getting that yaml data and store that exact yaml data(with new lines, spaces...) in database for future purposes. Can u give some idea to solve this problem.
0

it would be easier to use serialize or json for transferring an array. (but in that case, you would need a little function on clientside for serializing / json_encode)

EDIT: if encodeURIComponent is you problem, just do a urldecode before json_decode...

1 Comment

Yes i am using JSON.stringify() function at client side
-1

yes i tried, but it dosen't solve my problem.

What i want is, I am getting json objects from client side to php, which contains encoded data string using javascript encodeURIComponent(). If it contains this data, i am unable to convert this object into array using json_decode() function.

json string=packs="{\"packid\":\"22\",\"pverid\":\"18\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.%0A%20%20script%3A%20provider.py\"},{\"packid\":\"23\",\"pverid\":\"19\",\"yaml\":\"-%20url%3A%20%2Fstatic%0A%20%20static_dir%3A%20static%0A%0A-%20url%3A%20.%0A%20%20script%3A%20provider.py\"}"

Thanking you, sureace

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.