tags:

views:

123

answers:

6

Hi, 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

A: 

Have a look at the implode function.

cypher
yes use the implode function
Graham
How would `implode` convert a *string* into an *array*?
deceze
it wouldn't.. he meant `explode`, probably.
no
Sorry about that, of course it's the explode function :-)
cypher
`explode` is for converting a delimited string into an array. The coded string in the OP is not a straight forward delimited string.
w3d
+1  A: 

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.

deceze
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
@no I think those newlines are part of the string.
deceze
ah, ok, your edit of the OP helps a lot :)
no
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.
A: 

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...

oezi
Yes i am using JSON.stringify() function at client side
A: 

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.

alexn
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.
A: 

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

see my edit... how about urldecode before json_decode?
oezi
A: 

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...?

w3d
"you can use eval()" Don't do it.
NullUserException
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.
w3d