jjacques68 Posté(e) le 28 avril 2018 Signaler Posté(e) le 28 avril 2018 (modifié) Bonjour à tous : Je suis entrain de construire une URL pour appeler un fichier PHP avec des arguments. Mon soucis est le caractère esapce dans l'url. je veux obtenir cela : http://192.168.2.13...../script.php?Argt='Mon%20argument' J'utilise pour cela : MonArg = string.gsub("Mon argument", "%s", "%20") Mais j'ai une erreur, il me dit [DEBUG] 18:08:47: [1;31m2018-04-28 18:08:47.561936 [ fatal] Unknown exception: /opt/fibaro/scenes/238.lua:37: invalid capture index Vous avez une idée ? Merci tout plein !! Modifié le 28 avril 2018 par jjacques68
jjacques68 Posté(e) le 28 avril 2018 Auteur Signaler Posté(e) le 28 avril 2018 bon je viens de trouver la blague !!! fallait mettre %%20 !!!!!!! MonArg = string.gsub("Mon argument", "%s", "%%20") 1 1
Lazer Posté(e) le 28 avril 2018 Signaler Posté(e) le 28 avril 2018 Cherche la fonction urlencode() sur le forum (qu'on trouve notamment avec le VD SMS Gateway), ça sera plus générique. 2
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 (modifié) @Lazer : ça corrige aussi les accents ? Parce qu'avant de vouloir créer l'url, je passe les arguments dans une scène, et si y a des accents dans les chaines de caractères, ce passage d'arguments d'une scène à l'autre me les transforme en du chinois Modifié le 29 avril 2018 par jjacques68
Lazer Posté(e) le 29 avril 2018 Signaler Posté(e) le 29 avril 2018 Je ne maitrise pas bien les conversions, mais normalement cette fonction est censée convertir tous les caractères qui doivent l'être pour passer dans une URL (donc aussi les caractères spéciaux). D'ailleurs Fibaro a maintenant intégré la fonction urlencode() en standard dans les scène, mais pas les VD (qui ont toujours le vieux moteur LUA)
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 mais comment j'y accède a cette fonction ?
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 bon j'ai essayé ça, mais ça me gère pas les accents function urlencode(s) if (s) then s = string.gsub (s, "\n", "\r\n") s = string.gsub (s, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) s = string.gsub (s, " ", "+") end return s end
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 En fait les accents dans l'url ne posent pas de problème. Je viens de tester. Par contre, le fait de passer une chaine de caractères en argument d'une scène à l'autre transforme les accents !! c'est fibaro qui fait cette transformation ?
Lazer Posté(e) le 29 avril 2018 Signaler Posté(e) le 29 avril 2018 Oui ça semble être la bonne fonction. Pour les accents, je ne sais pas, désolé. Mais par contre, passer des arguments complexes via l'URL (donc en GET) n'est pas une bonne pratique. Tu ferais mieux de passer tes données dans le payload en POST ou en PUT. Ce qui résoudrait ton problème, par exemple en passant un json.encode() sur ton tableau de données à envoyer (même si ce tableau ne comporte qu'un seul élément)
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 oulà pas tout comprendre là... payload ???? ce que je fais, c'est que je suis entrain de faire une sorte de base de données de log de la HC2 sur mon synology. J'ai un script PHP qui est appelé dans mes scènes où je transmet mes infos. Celles-ci sont envoyées dans une base MariaDB. Ensuite je l'interroge avec un petit soft Windev. ça marche plutôt bien, juste ces accents
jjacques68 Posté(e) le 29 avril 2018 Auteur Signaler Posté(e) le 29 avril 2018 Bon je viens de régler le problème en utilisant une des fonctions utilisées pour le Google Home : function ReplaceChar(s) local Char = { -- 3 caractères à détecter {" ' ", "'"}, -- 2 caractères à détecter {"é", "é"}, {"à©", "é"}, {"è", "è"}, {"à¨","è"}, {"î", "î"}, {"ô", "ô"}, {"û", "û"}, {"ù", "ù"}, {"ê", "ê"}, {"â","â"}, --1 caractère à détecter {"Ã", "à"}, } for i,v in pairs(Char) do s = string.gsub(s, v[1], v[2]) end return s end ducoup j'ai mes accents, et ça passe dans l'URL...
Lazer Posté(e) le 29 avril 2018 Signaler Posté(e) le 29 avril 2018 Ah là ça sent le problème d'encodage ISO / UTF8 à plein nez là. Le payload (la charge utile ne français), ce sont les données que tu passes lors d'une requête PUT ou POST. L'avantage est de ne pas être limité en taille, puisque ça ne passe pas dans l'URL.... autre avantage, ça ne laisse pas de trace dans les journaux de tous les serveurs Web et Proxy du monde entier. (aparté : dans le même genre, le login/password dans l'URL est une mauvaise pratique... pour la même raison)
jjacques68 Posté(e) le 1 mai 2018 Auteur Signaler Posté(e) le 1 mai 2018 y a un topic sur le payload ?
Lazer Posté(e) le 1 mai 2018 Signaler Posté(e) le 1 mai 2018 Pas particulièrement, ou tous à la fois. N'importe quel bout de code LUA avec une requête POST ou PUT, il y en a des tonnes.
Messages recommandés