cherche js compatible urlencode de php...

Le
unbewusst.sein
tout est dans le titre ;-)

je cherche donc un js compatible urlencode de php
--
Une Bévue
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SAM
Le #6800901
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)
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,'&')
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,'&')
}
function decodeURL(url) {
return decodeURI(url).replace(/+/g,' ')).replace(/&/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,'&'));

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,'&'));document.close();
(voir le source: http://si+te.cm?val1=m%C3%A8+che&val2=tr%C3%B4u)

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

--
sm

unbewusst.sein
Le #6801721
SAM
cé koi urlencode de php ?

kesskeçafé ?


http://fr.php.net/urlencode

en JS on a : escape(url) ou encodeURI(url)
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,'&')
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,'&')
}
function decodeURL(url) {
return decodeURI(url).replace(/+/g,' ')).replace(/&/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

SAM
Le #6805511
SAM
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 !


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


unbewusst.sein
Le #6809691
SAM

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


SAM
Le #6875051
SAM
(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


unbewusst.sein
Le #6880531
SAM

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

SAM
Le #6883151
SAM
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


Publicité
Poster une réponse
Anonyme