Каков наилучший способ разобрать Paypal NVP в PHP?

Мне нужна функция, которая будет правильно анализировать NVP в массиве PHP. Я использовал код, предоставленный paypal, но он не работал, когда длина строки была указана рядом с именем.

Вот что я до сих пор.

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; } 

Эта функция работает большую часть времени.

    Лучший способ – это функция parse_str . Он проанализирует строку URLencoded в массиве PHP.

    Таким образом, ваш код будет выглядеть так:

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

    Много раз я нашел это:

     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; } в 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; } 

    Источник .

    Я НЕ владею этим кодом, и я его не тестировал, поэтому используйте его с осторожностью.