هل يمكنني قراءة جزء التجزئة من عنوان URL على تطبيق My Server-Side (PHP، Ruby، Python، إلخ)؟

StackOverflow https://stackoverflow.com/questions/940905

سؤال

على افتراض عنوان URL من:

www.example.com/?val=1#part2

PHP يمكن قراءة متغيرات الطلب val1 باستخدام مجموعة الحصول على صفيف.

هي قيمة التجزئة part2 مقروءة أيضا؟ أو هل هذا فقط حتى المتصفح وجافا سكريبت؟

هل كانت مفيدة؟

المحلول

المشكلة الرئيسية هي أن المتصفح لن يرسل طلبا مع جزء شظية. تم حل جزء الشظية هناك في المتصفح. لذلك يمكن الوصول إليها من خلال جافا سكريبت.

على أي حال، يمكنك تحليل عنوان URL في البتات، بما في ذلك الجزء الشظية، باستخدام parse_url (), ، ولكن من الواضح أنه ليس حالتك.

نصائح أخرى

اختبار بسيط، والوصول http: // localhost: 8000 / hello؟ foo = bar # هذا - غير مرسلة إلى الخادم

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

يتلقى الخادم الطلب دون #Appendage - أي شيء بعد علامة التجزئة هي ببساطة بحث مرساة على العميل.

يمكنك العثور على اسم المرساة المستخدمة داخل عنوان URL عبر JavaScript باستخدام، كمثال:

<script>alert(window.location.hash);</script>

يمكن أن تعمل وظيفة PARSE_URL () في PHP إذا كان لديك بالفعل سلسلة URL المطلوبة بما في ذلك الجزء (http://codepad.org/bdqjtxix.):

<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>

Output: fizzbuzz

لكنني لا أعتقد أن PHP يتلقى معلومات الشظية لأنه عميل فقط.

يتم استرجاعها من جافا سكريبت - كما window.location.hash. وبعد من هناك، يمكنك إرسالها إلى الخادم باستخدام AJAX على سبيل المثال، أو ترميزه ووضعه في عناوين URL التي يمكن بعد ذلك تمريرها إلى جانب الخادم.

لا يتم إرسال التجزئة أبدا إلى الخادم، لذلك لا.

نعم هذا صحيح، لا يحصل الخادم على جزء المرساة. ومع ذلك، هناك حل باستخدام ملفات تعريف الارتباط. يمكنك العثور عليها هنا: http://www.stoimen.com/blog/2009/04/15/read-the-thehor-part-of-the-url-with-php/

الجواب لا.

الغرض الرئيسي من التجزئة هو التمرير إلى جزء معين من الصفحة التي حددتها إشارة مرجعية. على سبيل المثال، قم بالتمرير إلى هذا الجزء عند تحميل الصفحة.

ستقوم الاستعراض بالتمرير بحيث يكون هذا السطر هو أول محتوى مرئي في الصفحة، اعتمادا على مقدار المحتوى التالي أدناه الخط.

نعم جافا سكريبت يمكن أن يؤكد ذلك، ثم دعوة AJAX البسيطة ستقوم بالسحر

أعتقد أن قيمة التجزئة تستخدم فقط جانب العميل فقط، لذلك لا يمكنك الحصول عليها مع PHP.

يمكنك إعادة توجيهها مع جافا سكريبت إلى PHP رغم ذلك.

نعم يمكنك:

استخدم هذه الطريقة لمنع الأخطاء:

<script> 
query=location.hash;
document.cookie= 'anchor'+query;
</script>

وبالطبع في PHP، تنفجر هذا الجرو والحصول على واحدة من القيم

$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag

ماذا عن:

الاستيلاء بشكل حيوي على #hash

<script>
var urlhash = window.location.hash, //get the hash from url
    txthash = urlhash.replace("#", ""); //remove the #
    //alert(txthash);
</script>

<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>

لجعلها بطلاقة:

مثال كامل باستخدام JavaScript و PHP فقط

<script>
var urlhash = window.location.hash,  //get the hash from url
txthash = urlhash.replace("#", "");  //remove the #

function changehash(a,b){
   window.location.hash = b; //add hash to url
   //alert(b); //alert to test
   location.reload(); //reload page to show the current hash
}
</script>

<?php $hash = "<script>document.writeln(txthash);</script>";?>

<a onclick="changehash(this,'#hash1')">Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')">Change to #hash2</a> 

<?php echo "This is the current hash: " . $hash; ?> 
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>

هذا يجب أن تعمل

عشر جزء من أوري بعد # يسمى "شظية" وهو بحكم تعريفه متاح فقط / معالجته على جانب العميل (انظر https://en.wikipedia.org/wiki/fragment_dentifier.).

على جانب العميل، يمكن الوصول إلى هذا باستخدام JavaScript مع window.location.hash.

حل آخر هو إضافة حقل إدخال مخفي إلى صفحة PHP:

<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">

باستخدام JavaScript / JQuery، يمكنك ضبط قيمة هذا الحقل على تحميل الصفحة أو الاستجابة لحدث:

$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));

في PHP على جانب الخادم، يمكنك قراءة هذه القيمة باستخدام مجموعة $ _Post:

$server_location_hash = $_POST['myHiddenLocationHash'];

يمكننا أن نفعل ذلك بنهج آخر أيضا، مثل أولا وقبل كل شيء الحصول على قيمة التجزئة من JS واتصل AJAX باستخدام هذه المعلمة ويمكن أن تفعل ما نريده

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top