Aller au contenu

Remplacer espace dans une url en lua


Messages recommandés

Posté(e) (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é par jjacques68
Posté(e)

Cherche la fonction urlencode() sur le forum (qu'on trouve notamment avec le VD SMS Gateway), ça sera plus générique.

  • Like 2
Posté(e) (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é par jjacques68
Posté(e)

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)

Posté(e)

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 

 

Posté(e)

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 ?

Posté(e)

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)

Posté(e)

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 :( 

 

 

 

Posté(e)

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...

Posté(e)

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)

Posté(e)

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.

×
×
  • Créer...