Comment obtenir le champ de saisie de la valeur à partir d'un formulaire à l'aide de preg_match()
Je ne suis pas un expert dans ce domaine, de sorte s'il vous plaît aidez-moi à sortir de rechange et de mon ignorance, le cas échéant.
Je suis en train de roulage par une page et que vous souhaitez obtenir la valeur de l'caché <input>
champ. Je ne suis pas familier avec les regexp. mon code est comme ci-dessous:
$page = curl_exec($ch);
}
curl_close($ch);
function parse_form_fields($page, $username, $password){
preg_match("/<input id=\"signuptoken\" type=\"hidden\" value=\"(.+?)\" name=\"signuptoken\"/", $page, $m);
$captchatoken = $m[1];
$parameters[] = "newaccounttoken=" . urlencode($captchatoken);
}
le champ de formulaire est comme ci-dessous:
<input id="signuptoken" type="hidden" value="03AHJ_Vuv2ts6ev2LltAkZB91vjD6k-BsW3286bTC9QZYZLSHQUMNDQJFUaNmAQMAYb9FDhIkOFzAisafasfsTZuv_pl5KvkYNfsGUPcOAEX5YPlMaMOi7MZJq4ky0v_GyM60SmMgjPrtfZSJYE0hqw--GsfsafasmER0Sksr6OAvnLnBVAMsKcCi7uM" name="signuptoken">
Je veux obtenir la valeur de ce champ de saisie.
Vous devez vous connecter pour publier un commentaire.
Vous êtes mieux d'utiliser DOMDocument. Par exemple:
Cela devrait fonctionner pour vous de trouver la valeur:
Parsing HTML avec la regex n'est pas exactement résilient, cependant, qu'il suffit de changer l'ordre de la
id
et latype
dans l'exempleinput
balise de briser le grattoir. Si vous êtes certain que le HTML ne changera jamais, qui ne devrait pas être un problème, mais juste être conscient d'un DOM parser peut-être plus utile dans certains cas.[file_get_contents](http://php.net/manual/en/function.file-get-contents.php)
pour charger une URL si votre installation de PHP est configuré correctement (ce qui est probablement le cas) – il suffit de remplacer$input = '...';
dans l'exemple avec$input = file_get_contents('[your url]');
et qui devrait fonctionnerN'utilisez pas des choses comme
value=\"(.+?)\"
, vous pouvez avoir beaucoup de problèmes avec eux dans certaines mauvaises-formaté en HTML. Utilisez quelque chose de plus limitant commevalue=\"([^\">]+?)\"
. La différence est que.
correspond à un beaucoup plus grand nombre d'entités, que[^">]
, qui finissent toujours sur l'étiquette de près ou de devis à proximité.Le problème dans votre cas, peut-être le manque de multi-ligne le modificateur de requête s, essayez
preg_match('/<input id="signuptoken" type="hidden" value="(.*?)"/s', $page, $m);
.Autre que cela, je vais en deuxième lieu, l'utilisation DOM.
Aussi, enregistrer la page HTML dans un fichier et de tester votre RegEx sur fichier local au lieu d'appeler la page à chaque fois.