Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

cherche js compatible urlencode de php...

7 réponses
Avatar
unbewusst.sein
tout est dans le titre ;-)

je cherche donc un js compatible urlencode de php
--
Une Bévue

7 réponses

Avatar
SAM
tout est dans le titre ;-)

je cherche donc un js compatible urlencode de php



cé koi urlencode de php ?

kesskeçafé ?

en JS on a : escape(url) ou encodeURI(url)
<http://fr.selfhtml.org/javascript/objets/independant.htm#escape>
<http://fr.selfhtml.org/javascript/objets/independant.htm#encode_uri>
mais ça n'a pas l'air de faire tout exactement pareil que urlencode($url)

qui semble plutôt faire :
url.replace(/ /g,'+').replace(/&/g,'&amp;')
en plus de passer en %truc les caractères inavouables

Voir à voir si des fois :

function encodeURL(url) {
return encodeURI(url.replace(/ /g,'+')).replace(/&/g,'&amp;')
}
function decodeURL(url) {
return decodeURI(url).replace(/+/g,' ')).replace(/&amp;/g,'&')
}

Mais, normalement, encoreURI(url) devrait suffire.
javascript:var e='http://si te.cm?val1=mè
che&val2=trôu';alert(encodeURI(e));

javascript:var e='http://si te.cm?val1=mè
che&val2=trôu';alert(encodeURI(e.replace(/ /g,'+')).replace(/&/g,'&amp;'));

javascript:var e='http://si te.cm?val1=m%C3%A8
che&val2=tr%C3%B4u';document.open();document.write(encodeURI(e.replace(/
/g,'+')).replace(/&/g,'&amp;'));document.close();
(voir le source: http://si+te.cm?val1=m%C3%A8+che&amp;val2=tr%C3%B4u)

et pour décoder :
javascript:var e='http://si+te.cm?val1=m%C3%A8+che&amp;val2=tr%C3%B4u';
document.open(); document.write(decodeURI(e).replace(/+/g,'
').replace(/&amp;/g,'&')); document.close();

--
sm

Avatar
unbewusst.sein
SAM wrote:

cé koi urlencode de php ?

kesskeçafé ?


http://fr.php.net/urlencode

en JS on a : escape(url) ou encodeURI(url)
<http://fr.selfhtml.org/javascript/objets/independant.htm#escape>
<http://fr.selfhtml.org/javascript/objets/independant.htm#encode_uri>
mais ça n'a pas l'air de faire tout exactement pareil que urlencode($url)

qui semble plutôt faire :
url.replace(/ /g,'+').replace(/&/g,'&amp;')
en plus de passer en %truc les caractères inavouables

Voir à voir si des fois :

function encodeURL(url) {
return encodeURI(url.replace(/ /g,'+')).replace(/&/g,'&amp;')
}
function decodeURL(url) {
return decodeURI(url).replace(/+/g,' ')).replace(/&amp;/g,'&')
}

Mais, normalement, encoreURI(url) devrait suffire.
javascript:var e='http://si te.cm?val1=mè
che&val2=trôu';alert(encodeURI(e));


oui, c'est ce que j'utilise, à titre provisoire, cf mon essai, en js :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/path2id.html
et son équivalent en php :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/path2id.php
de contenu :
------------------------------------------------------------------------
<?php
$path='/Users/yt/Sites/JS/doc/closures/closures_fichiers';
$id='ID'.urlencode($path);
$id=preg_replace('/%/', ':', $id);
$pathback=preg_replace('/:/', '%', substr($id, 2));
$pathback=urldecode($pathback);
?>
<html><head><title>PHP Path to ID encoder/decoder</title>
</head>
<body><br />
<h5><?echo $path?></h5>
<h5><?echo $id?></h5>
<h5><?echo $pathback?></h5>
</body></html>
------------------------------------------------------------------------

j'ai lu sur le net que urlencode et encodeURI ne sont pas strictement
equivalents.

j'ai trouvé un script, mais qui ne marche pas chez moi, :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/webtoolkit.url.js

c'est pour ce projet "dir tree" par xhr, où l'on présente en html le
premier niveau d'un répertoire, si l'utilisateur clique sur un dossier
une requête xhr est envoyée à un script php qui répond en envoyant, une
représentation html du sous-dossier sur lequel on a cliqué.

j'ai donc besoin d'encoder le path (au sens unix) du dossier de telle
manière qu'il soit compatible avec les exigences d'un ID en html.

mon premier essai est là :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php
la première requête fonctionne mais la page s'affiche sans images et les
liens href ne marchent pas, je ne pige pas pourquoi.
sur mon mac, j'ai sauvegardé cette page index.php en index.php.html :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php.html
elle montre d'abord ce que la page précédente (index.php) aurait dû
afficher puis fait une nouvelle requêtesur le même dossier avec le même
résultat...

--
Une Bévue

Avatar
SAM
SAM wrote:

Voir à voir si des fois :

function encodeURL(url) {
return encodeURI(url.replace(/ /g,'+')).replace(/&/g,'&amp;')
}
function decodeURL(url) {
return decodeURI(url).replace(/+/g,' ')).replace(/&amp;/g,'&')
}


cf mon essai, en js :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/path2id.html


Ha! mais là, en +, tu veux ':' remplaçant '/' !
(sais pas pourquoi tu veux tous ces trucs d'id, m'enfin ...)

var path = "/Users/yt/Sites/JS/doc/closures/closures_fichiers",
id = "ID"+encodeURIComponent(path).replace(/%2F/g,':'),
pathback = decodeURIComponent(id.substring(2).replace(/:/g,'%2F'));

et son équivalent en php :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/path2id.php


$path = '/Users/yt/Sites/JS/doc/closures/closures_fichiers';
$id = preg_replace('/%2F/', ':', 'ID'.urlencode($path));
$pathback = urldecode(preg_replace('/:/', '%2F', substr($id, 2)));

de toutes façons tu triches :
tu n'as ni dossier ni fichier avec accents !
<http://je.m.arrete.free.fr/yt/url_encode_yt.php>
<http://je.m.arrete.free.fr/yt/url_encode_stef.php>


j'ai lu sur le net que urlencode et encodeURI ne sont pas strictement
equivalents.


c'est bien ce que je disais ;-)
mais là est-ce réellement important ?

mon premier essai est là :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php
la première requête fonctionne mais la page s'affiche sans images et les
liens href ne marchent pas, je ne pige pas pourquoi.


ce browse() ?

sur mon mac, j'ai sauvegardé cette page index.php en index.php.html :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php.html
elle montre d'abord ce que la page précédente (index.php) aurait dû
afficher puis fait une nouvelle requêtesur le même dossier avec le même
résultat...



Pourquoi n'a t-on pas simplement :

<li title="menus - last modified: 23rd May 08 19:35:50"
class="dir"
id="ID:Users:yt:Sites:XML:menus"
onclick="browse(this);">
menus
</li>

au lieu de :

<li title="menus - last modified: 23rd May 08 19:35:50">
<span onclick='browse("ID:2FUsers:2Fyt:2FSites:2FXML:2Fmenus");'
class="dir">menus</span>
<div style="margin-left: 2em"
id="ID:2FUsers:2Fyt:2FSites:2FXML:2Fmenus">
&nbsp;
</div>
</li>


pour obtenir après déploiement :


<li title="menus - last modified: 23rd May 08 19:38:10"
class="dir_opened"
id="ID:Users:yt:Sites:XML:menus"
onclick="browse(this);">
menus
<ul>
<li class="file"
id="ID:Users:yt:Sites:XML:menus:truc.xhtml"
onclick="browse(this)">
truc.xhtml
<li>
<li class="imag"
id="ID:Users:yt:Sites:XML:menus:truc.png"
onclick="browse(this)">
truc.png
<li>
</ul>
</li>


function browse(what) {
var path = decodeURIComponent(what.id.substring(2).replace(/:/g,'%2F'));
if(what.className.indexOf('opened')<0)
location = path;
else
location = replier(path);
// what.getElementsByTagName('UL')[0].style.display = 'none';
}


--
sm


Avatar
unbewusst.sein
SAM wrote:


Ha! mais là, en +, tu veux ':' remplaçant '/' !
(sais pas pourquoi tu veux tous ces trucs d'id, m'enfin ...)


ben c'est juste pour avoir un id conforme à la norme du w3c qui ne
supporte pas le % mais seulement :
A-Za-z0-9 : et .


j'ai lu sur le net que urlencode et encodeURI ne sont pas strictement
equivalents.


c'est bien ce que je disais ;-)
mais là est-ce réellement important ?


+/- j'ai un fichier avec une apostrophe "'" qui ne marche pas.


mon premier essai est là :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php
la première requête fonctionne mais la page s'affiche sans images et les
liens href ne marchent pas, je ne pige pas pourquoi.




j'ai trouvé le pb, c'est un bête problème de namespace...

ce browse() ?

sur mon mac, j'ai sauvegardé cette page index.php en index.php.html :
http://thoraval.yvon.free.fr/PHP/AJAX_dir_tree/index.php.html
elle montre d'abord ce que la page précédente (index.php) aurait dû
afficher puis fait une nouvelle requêtesur le même dossier avec le même
résultat...



Pourquoi n'a t-on pas simplement :

<li title="menus - last modified: 23rd May 08 19:35:50"
class="dir"
id="ID:Users:yt:Sites:XML:menus"
onclick="browse(this);">
menus
</li>

au lieu de :

<li title="menus - last modified: 23rd May 08 19:35:50">
<span onclick='browse("ID:2FUsers:2Fyt:2FSites:2FXML:2Fmenus");'
class="dir">menus</span>
<div style="margin-left: 2em"
id="ID:2FUsers:2Fyt:2FSites:2FXML:2Fmenus">
&nbsp;
</div>
</li>


pour obtenir après déploiement :


<li title="menus - last modified: 23rd May 08 19:38:10"
class="dir_opened"
id="ID:Users:yt:Sites:XML:menus"
onclick="browse(this);">
menus
<ul>
<li class="file"
id="ID:Users:yt:Sites:XML:menus:truc.xhtml"
onclick="browse(this)">
truc.xhtml
<li>
<li class="imag"
id="ID:Users:yt:Sites:XML:menus:truc.png"
onclick="browse(this)">
truc.png
<li>
</ul>
</li>


oui, ça la structure, c'est modifiable, il fallait d'abord que ça roule
pour tester le principe...


function browse(what) {
var path = decodeURIComponent(what.id.substring(2).replace(/:/g,'%2F'));
if(what.className.indexOf('opened')<0)
location = path;
else
location = replier(path);
// what.getElementsByTagName('UL')[0].style.display = 'none';
}


euh, attends là, le script marche par xhr, il affiche à l'ouverture
l'arborescence de premier niveau et quand on clique sur un dossier, le
javascript browse(dir); fait un xhr vers le php browse.php qui lui
répond en envoyant le contenu du répertoire sous forme xml/xhtml.
--
Une Bévue


Avatar
SAM
SAM wrote:

(sais pas pourquoi tu veux tous ces trucs d'id, m'enfin ...)


ben c'est juste pour avoir un id conforme à la norme du w3c


Non, je n'ai pas compris : *pourquoi* un(des) ID(s)
(de plus avec comme nom le chemin d'un truc)
(j'ai révé ou j'ai bien vu le même chemin dans le browsing ?)

qui ne supporte pas le % mais seulement : A-Za-z0-9 : et .


Mais puisqu'on a le path dans la fonction appelante, pourquoi se le
refarcir pour un id ?

mais là est-ce réellement important ?


+/- j'ai un fichier avec une apostrophe "'" qui ne marche pas.


ne seront pas non plus acceptés les accents
(de mon jeune temps il était vivement conseillé de ne pas avoir sur un
serveur des noms de fichiers accentués ni à trous)

Pourquoi n'a t-on pas simplement :

<li title="menus - last modified: 23rd May 08 19:35:50"
class="dir"
id="ID:Users:yt:Sites:XML:menus"
onclick="browse(this);">
menus
</li>


oui, ça la structure, c'est modifiable, il fallait d'abord que ça roule
pour tester le principe...


C'est marrant, j'aurais d'abord réfléchi à une bonne structure html
avant d'essayer un principe de modification de code html.
(et ce que je propose n'est peut-être pas l'idéal ... !)

function browse(what) {
var path = decodeURIComponent(what.id.substring(2).replace(/:/g,'%2F'));
if(what.className.indexOf('opened')<0)
location = path;
else
location = replier(path);
// what.getElementsByTagName('UL')[0].style.display = 'none';
}


euh, attends là, le script marche par xhr, il affiche à l'ouverture
l'arborescence de premier niveau et quand on clique sur un dossier, le
javascript browse(dir); fait un xhr vers le php browse.php qui lui
répond en envoyant le contenu du répertoire sous forme xml/xhtml.


Oui, bon, tu bricoles comme tu veux à la suite du clic,
le : 'location = path' n'est là que pour figurer ton schmillblick
Et je te parle surtout d'alléger le html (redondances sur le path, moult
balises imbriquées pour un item ...) et puis je ne fais là que replier
l'bazar, on va as aller re-titiller le serveur pour ça ?! maintenant
qu'on a déployé tant d'efforts pour charger une bonne partie)

--
sm


Avatar
unbewusst.sein
SAM wrote:


Mais puisqu'on a le path dans la fonction appelante, pourquoi se le
refarcir pour un id ?


quand XHR retourne la structure d'un dossier, cette structure peut
contenir d'autres dossiers qu'il faut bien identifier par une bijection
PATH <--> ID...
--
Une Bévue

Avatar
SAM
SAM wrote:

Mais puisqu'on a le path dans la fonction appelante, pourquoi se le
refarcir pour un id ?


quand XHR retourne la structure d'un dossier, cette structure peut
contenir d'autres dossiers qu'il faut bien identifier par une bijection
PATH <--> ID...


Je crois que je fais un blocage là :-(

--
sm