Obtenir un fragment (valeur après hachage '#') à partir d'une URL en php
9 réponses
si vous voulez obtenir la valeur après la marque de hachage ou l'ancre comme indiqué dans le navigateur d'un utilisateur: ce N'est pas possible avec le HTTP" standard "car cette valeur N'est jamais envoyée au serveur (donc elle ne sera pas disponible dans $_SERVER["REQUEST_URI"]
ou des variables prédéfinies similaires). Vous auriez besoin d'une sorte de magie JavaScript du côté du client, par exemple pour inclure cette valeur comme paramètre POST.
S'il ne s'agit que d'analyser une URL connue à partir de n'importe quelle source, la réponse par mck89 est parfaitement bien.
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
A) avez-vous déjà une url avec #hash en PHP? Facile! Juste l'analyser !
if( strpos( $url, "#" ) === false ) echo "NO HASH !";
else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
Ou dans les "anciens" de PHP, vous devez pré-stocker le explosé pour accéder au tableau:
$exploded_url = explode( "#", $url ); $exploded_url[1];
B) vous voulez obtenir un #hash en envoyant un formulaire à PHP?
= > utilisez un peu de magie JavaScript! (Pour pré-traiter le formulaire)
var forms = document.getElementsByTagName('form'); //get all forms on the site
for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form...
function(){ //add a submit pre-processing function that will:
var hidden = document.createElement("input"); //create an extra input element
hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view
hidden.setAttribute('name','fragment'); //set a name to get by it in PHP
hidden.setAttribute('value',window.location.hash); //set a value of #HASH
this.appendChild(hidden); //append it to the current form
});
selon votre attribut form
's method
vous obtenez ce hachage en PHP par:
$_GET['fragment']
ou $_POST['fragment']
possibilités de retour: 1. ""
[chaîne vide] (sans hachage) 2. tout le hachage incluant le signe #
[hachage] (parce que nous avons utilisé le window.location.hash
en JavaScript qui fonctionne juste de cette façon:))
C) vous voulez obtenir le #hachage en PHP juste de l'URL demandée?
VOUS NE POUVEZ PAS !
...(pas en considérant les requêtes HTTP régulières)...
...Espérons que cela m'a aidé :)
j'ai été à la recherche d'une solution pour contourner cela pour un peu - et la seule chose que j'ai trouvé est D'utiliser URL réécrit pour lire le"ancre". J'ai trouvé dans les docs apache ici http://httpd.apache.org/docs/2.2/rewrite/advanced.html la suivante...
par défaut, rediriger vers une ancre HTML ne fonctionne pas, parce que mod_rewrite échappe au caractère#, le transformant en %23. Ceci, à son tour, casse la redirection.
Solution: utiliser le drapeau [NE] sur la règle de réécriture. NE signifie Pas Échapper.
Discussion: cette technique fonctionnera bien sûr aussi avec d'autres les caractères qui mod_rewrite, par défaut, URL-encodes.
il peut y avoir d'autres mises en garde ... mais je pense qu'au moins faire quelque chose avec le # sur le serveur est possible.
vous ne pouvez pas obtenir le texte après le marque de hachage . Il n'est pas envoyé au serveur dans une demande.
j'ai trouvé cette astuce, si u insiste vouloir la valeur avec php.. split de l'ancre (#) valeur et de le faire avec javascript, puis le stocker en tant que témoin, après que obtenir la valeur du cookie avec php~
http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php /
vous devez analyser l'url en premier, donc il va comme ceci:
$url = "https://www.example.com/profile#picture";
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
si vous devez analyser l'url réelle du navigateur actuel, vous devez demander d'appeler le serveur.
$url = $_SERVER["REQUEST_URI"];
$fragment = parse_url($url,PHP_URL_FRAGMENT); //this variable holds the value - 'picture'
vous pouvez faire un remplacement de chaîne de caractères du côté client puis du côté serveur. Pas une solution particulièrement robuste mais si vous ne voulez pas une solution rapide comme moi, il suffira je pense.
Client:
var tempString = stringVal.replace('#', 'hashtag');
Serveur:
$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);
obtenir les données après le hashmark dans une chaîne de requête est simple. Voici un exemple utilisé lorsqu'un client accède à un glossaire de termes à partir d'un livre. Il prend le nom anchor delivered (#tesla), et livre le client à ce terme et met en évidence le terme et sa description en bleu afin de son facile à voir.
A. configurez vos chaînes de caractères avec un ID div, de sorte que le nom ancre va là où il est supposé et le javascript peut changer les couleurs du texte
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B. Utilisez Javascript pour faire le travail lourd, du côté du serveur, inséré dans votre page PHP, ou n'importe où..
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C. je lance la fonction java automatiquement lorsque la page est chargée.
<script>
$( document ).ready(function() {
D. obtenir l'ancre (#tesla) à partir de l'url reçue par le serveur
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E. couper le signe dièse hors de lui
myhash1 = myhash1.substr(1) //myhash1 == tesla
F. j'ai besoin pour mettre en surbrillance l' le terme et la description ainsi je crée un nouveau var
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G. maintenant je peux manipuler la couleur du texte pour le terme et la description
var elem = document.getElementById(myhash1);
elem.style.color = 'blue';
elem = document.getElementById(myhash2);
elem.style.color = 'blue';
});
</script>
H. ça marche. le client clique sur le lien du côté du client (xyz.com # tesla) et va droit au terme. le terme et la description sont surlignés en bleu par javascript pour une lecture rapide .. toutes les autres entrées sont en noir..