Hola,
No es por molestar, pero ¿que pasa si unos parametros de la URL son un array (pagina.php?op[]=1&op[]=3&var[1]=hola&var['hola']=adios)? Pues me temo que crearia los links con pagina.php?op=Array&var=Array.
La solucion es "sencilla". En el foreach metes una comprobacion de is_array($valor), y en caso afirmativo generas todos los parametros de ese array (incluso debes tener en cuenta los arrays multidimensionales).
A mi ni me va ni me viene, pero por comentarlo tampoco pasa nada

(frase de un programa de humor de la ETB)
Suerte.
PD: Creo que
Código PHP:
$_pagi_query_string .= (strlen($_pagi_query_string) < 1) ? '' : '&';
es innecesario. Simplemente haciendo:
Código PHP:
foreach ($_GET as $clave => $valor) {
$_pagi_query_string .= '&'.$clave . '=' . rawurlencode($valor);
}
obtendremos el query string de la forma '&var=valor&var2=valor'. Y como luego (supongo) vas a concatenar con pg, harias:
Código PHP:
$url='?pg='.$pg.$_pagi_query_string;
(siento no poner las variables que usas) y no quedaria colgando nada.