What is the best way to parse Paypal NVP in PHP?

眉间皱痕 提交于 2020-01-03 07:28:24

问题


I need a function that will correctly parse NVP into PHP array. I have been using code provided by paypal but it did not work for when string length was specified next to the name.

Here is what i have so far.

private function parseNVP($nvpstr)
{
    $intial=0;
    $nvpArray = array();

    while(strlen($nvpstr))
    {
        //postion of Key
        $keypos= strpos($nvpstr,'=');
        //position of value
        $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr);

        /*getting the Key and Value values and storing in a Associative Array*/
        $keyval=substr($nvpstr,$intial,$keypos);
        $vallength=$valuepos-$keypos-1;
        // check if the length is explicitly specified
        if($braketpos = strpos($keyval,'['))
        {
            // override value length
            $vallength = substr($keyval,$braketpos+1,strlen($keyval)-$braketpos-2);
            // get rid of brackets from key name
            $keyval = substr($keyval,0,$braketpos);
        }
        $valval=substr($nvpstr,$keypos+1,$vallength);
        //decoding the respose
        if (isValidXMLString("<".urldecode($keyval).">".urldecode( $valval)."</".urldecode($keyval).">"))
            $nvpArray[urldecode($keyval)] =urldecode( $valval);
        $nvpstr=substr($nvpstr,$keypos+$vallength+2,strlen($nvpstr));
     }
    return $nvpArray;
}

This function works most of the time.


回答1:


The best way is the parse_str function. It will parse a URLencoded string into a PHP array.

So your code would look like:

private function parseNVP($nvpstr)
{
  $paypalResponse = array();
  parse_str($nvpstr,$paypalResponse);
  return $paypalResponse;
}



回答2:


Googling a lot I've found this:

function deformatNVP($nvpstr) {

    $intial=0;
    $nvpArray = array();


    while(strlen($nvpstr)){
        //postion of Key
        $keypos= strpos($nvpstr,'=');
        //position of value
        $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr);

        /*getting the Key and Value values and storing in a Associative Array*/
        $keyval=substr($nvpstr,$intial,$keypos);
        $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1);
        //decoding the respose
        $nvpArray[urldecode($keyval)] =urldecode( $valval);
        $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr));
     }
     return $nvpArray;
}

Source.

I DO NOT own this code and I don't have tested it, so use it with care.



来源:https://stackoverflow.com/questions/2520135/what-is-the-best-way-to-parse-paypal-nvp-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!