2010-01-26 8 views
0

Je passe la valeur ABSPATH d'une page d'options de thème wordpress à une page externe qui n'a pas accès à ABSPATH. Le problème est qu'une fois la valeur reçue dans le fichier externe, les barres obliques sont supprimées. Comment puis-je envoyer la valeur et garder les barres obliques intactes?Problème Wordpress stripslashes

Je passe la valeur pour abspath via un paramètre javascript URL window.open comme si ...

<input type="button" id="templateUpload" value="Add New Template" onclick="window.open('../wp-content/themes/mytheme/myuploader.php?abspath=<?php echo ABSPATH ?>','popup','width=330,height=230,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no'); return false" /> 

La source de ce qui précède la page des options de thème wordpress exécuté lit ...

abspath = C: \ xampplite \ htdocs \ wordpress/

Quelle est la raison pour laquelle je crois que je vais avoir un problème

Répondre

4

Il est le manque de chaîne JavaScript littérale échapper e à a trébuché vous: \x et \h sont des évasions dans les chaînes, de sorte que vous auriez besoin de \\ pour obtenir un vrai backslash.

Mais ce n'est pas tout.

<input ... onclick="window.open('.../myuploader.php?abspath=<?php echo ABSPATH ?>',... /> 

Ici, vous êtes sortie une valeur dans:

  1. un paramètre d'URL, à l'intérieur
  2. une chaîne JavaScript littérale, à l'intérieur
  3. un attribut HTML

Cela signifie vous avez besoin de trois niveaux d'échappement:

$uri= '../wp-content/themes/mytheme/myuploader.php?abspath='.urlencode(ABSPATH); 
$jsuri= json_encode($uri); 
$htmljsuri= htmlspecialchars($jsuri); 

<input ... onclick="window.open(<?php echo $htmljsuri; ?>, 'popup', 'features...')" /> 

Vous pouvez réduire ce en utilisant les options de HEX_ à json_encode pour assurer les caractères HTML spéciaux sont déjà se sont échappés de la route, en PHP 5.3+:

$uri= '../wp-content/themes/mytheme/myuploader.php?abspath='.urlencode(ABSPATH); 
$jsuri= json_encode($uri, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP); 

<input ... onclick="window.open(<?php echo $jsuri; ?>, 'popup', 'features...')" /> 

Cependant, tout ce qui concerne plusieurs niveaux d'échapper comme c'est confus et généralement à éviter. Frappez le JavaScript et la variable de la marge bénéficiaire à la place, alors vous avez un seul niveau d'échapper à se soucier à la fois:

<input type="button" id="templateUpload" value="Add New Template" /> 
<script type="text/javascript"> 
    var ABSPATH= <?php echo json_encode(ABSPATH, JSON_HEX_TAG|JSON_HEX_AMP); ?>; 

    document.getElementById('templateUpload').onclick= function() { 
     var uri= '../wp-content/themes/mytheme/myuploader.php?abspath='+encodeURIComponent(ABSPATH); 
     window.open(uri, 'popup', 'width=330, height=230'); 
    }; 
</script> 

J'omis le return false car il est pas nécessaire pour un button, qui n'a pas action par défaut à éviter. J'ai également enlevé le truc sur la suppression du chrome du navigateur juste à cause de le trouver assez désagréable. ;-)

+0

Wow Bobince, merci pour le travail que vous avez mis dans la réponse. J'apprécie vraiment cela! –