¿Por que asignas a $q el valor devuelto por parse_str()? Antes no lo hacias, yo no lo he puesto, y el manual pone que devulve void (es decir, nada).
Si es por lo que comente del array, deberia ser algo como:
Código PHP:
$parametros=array();
$url=parse_url($datos[1]);
parse_str($url['query'],$parametros);
$q=$parametros['q'];
unset($parametros);
Saludos.