আমি কি আমার সার্ভার-সাইড অ্যাপ্লিকেশনটিতে (পিএইচপি, রুবি, পাইথন ইত্যাদি) URL এর হ্যাশ অংশটি পড়তে পারি?


217

এর একটি URL ধরে নেওয়া:

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

পিএইচপি val1জিইটি অ্যারে ব্যবহার করে অনুরোধের ভেরিয়েবলগুলি পড়তে পারে ।

হ্যাশ মানটি কি part2পাঠযোগ্য? অথবা এটি কেবল ব্রাউজার এবং জাভাস্ক্রিপ্ট পর্যন্ত?

উত্তর:


203

মূল সমস্যাটি হ'ল ব্রাউজারটি এমনকি খণ্ড খণ্ডের সাথে একটি অনুরোধ প্রেরণ করবে না। খণ্ড অংশটি ঠিক ঠিক সেখানে ব্রাউজারে সমাধান করা হয়েছে। সুতরাং এটি জাভাস্ক্রিপ্ট মাধ্যমে অ্যাক্সেসযোগ্য।

যাইহোক, আপনি parse_url () ব্যবহার করে টুকরা অংশ সহ বিটগুলিতে একটি URL টি বিশ্লেষণ করতে পারেন , তবে এটি অবশ্যই আপনার ক্ষেত্রে নয়।


98

সরল পরীক্ষা, অ্যাক্সেস করা http: // লোকালহোস্ট: 8000 / হ্যালো? Foo = বার # এটি-সার্ভারে প্রেরণযোগ্য নয়

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 -

সার্ভারটি # অ্যাপেন্ডেজ ছাড়াই অনুরোধটি গ্রহণ করে - হ্যাশ ট্যাগের পরে যে কোনও কিছুই কেবল ক্লায়েন্টের অ্যাঙ্কর লকআপ।

উদাহরণস্বরূপ জাভাস্ক্রিপ্টের মাধ্যমে ইউআরএল-এর মধ্যে ব্যবহৃত অ্যাঙ্কর নামটি খুঁজে পেতে পারেন:

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

পিএইচপি-তে পার্স_আর্ল () ফাংশনটি যদি আপনার ইতিমধ্যে টুকরা ( http://codepad.org/BDqjtXix ) সহ প্রয়োজনীয় ইউআরএল স্ট্রিং থাকে তবে কাজ করতে পারে :

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

Output: fizzbuzz

তবে আমি মনে করি না যে পিএইচপি খণ্ডের তথ্য গ্রহণ করে কারণ এটি কেবল ক্লায়েন্ট।


48

এটি জাভাস্ক্রিপ্ট থেকে পুনরুদ্ধারযোগ্য - হিসাবে window.location.hash। সেখান থেকে আপনি এজ্যাক্স সহ এটি সার্ভারে উদাহরণস্বরূপ প্রেরণ করতে পারেন, বা এটি এনকোড করে ইউআরএলগুলিতে রাখতে পারেন যা পরে সার্ভারের পাশ দিয়ে যেতে পারে।


1
ধন্যবাদ! সুতরাং এর পরিবর্তে পরিষ্কার হওয়ার জন্য: www.example.com/?val=1#part2 আপনাকে এটির মতো সার্ভারে এটি পুনর্নির্দেশ করতে হবে: www.example.com/?redirectUrl=%2F%3Fval%3D1%23part2 এবং অবশ্যই আপনাকে অন্য পৃষ্ঠায় থাকা অন্য ইউআরএলে আপনাকে পুনঃনির্দেশ করার জন্য সমর্থন যোগ করতে হবে। দুর্দান্ত কিছু নয়, এবং অবশ্যই ব্যবহারের সমস্ত ক্ষেত্রে এটি কাজ করে না, তবে বুকমার্কগুলির জন্য কাজ করে। নোট করুন যে আপনি যদি এটি করেন তবে আপনি নিজেকে অনিরাপদ পুনর্নির্দেশের
ব্র্যাড পার্ক

25

হ্যাশটি কখনই সার্ভারে প্রেরণ করা হয় না, তাই না।


8

হ্যাঁ এটি সত্য, সার্ভারটি অ্যাঙ্কর অংশটি পায় না। তবে কুকিগুলি ব্যবহার করে এক ধরণের কাজ রয়েছে। আপনি এটি এখানে খুঁজে পেতে পারেন: http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/


2
এই "workaround" মূল্যহীন। আপনি যদি প্রতি পৃষ্ঠাগুলিতে 2 টি অনুরোধ দিয়ে ঠিক থাকেন তবে এক ডজন আরও ভাল কৌশল রয়েছে।
umassthrower

11
কীভাবে এটি মূল্যহীন? এটি অবশ্যই মূল্যহীন নয়। তবে এখানে আরও ভাল কৌশল রয়েছে hats
কিশোর

উন্নত কৌশলগুলি কি কি? আমার গুগল ওআউথের জন্য আমার কাছে এটি অ্যাক্সেস টোকেন হ্যাশ দিয়ে আমার এপিআই পৃষ্ঠায় পুনঃনির্দেশিত করেছে, তারপরে আমি একটি "অজ্যাক্স ইনসেপশন" করব যেখানে আমি একটি দ্রুত এজাক্স স্ক্রিপ্ট রেন্ডার করি যা একই পৃষ্ঠাটি অ্যাজাক্স করে তবে এই বারের অনুরোধের পরামিতি হিসাবে হ্যাশ মান সহ । এটি অদ্ভুত লাগে .. সম্ভবত আরও ভাল উপায় আছে তবে আমি যে সমস্ত উপায় দেখেছি তা হ্যাকি মনে হচ্ছে
Gisheri

7

উত্তর না হয়।

হ্যাশটির মূল উদ্দেশ্য হল পৃষ্ঠার একটি নির্দিষ্ট অংশে স্ক্রোল করা যেখানে আপনি একটি বুকমার্ক সংজ্ঞায়িত করেছেন। যেমন পৃষ্ঠা লোড হওয়ার পরে এই অংশে স্ক্রোল করুন।

ব্রাউজটি এমনভাবে স্ক্রোল করবে যে লাইনের নীচে কতগুলি বিষয়বস্তু অনুসরণ করে তার উপর নির্ভর করে এই লাইনটি পৃষ্ঠায় প্রথম দৃশ্যমান সামগ্রী।

হ্যাঁ জাভাস্ক্রিপ্ট এটিকে অ্যাক্সেস করতে পারে এবং তারপরে একটি সাধারণ এজ্যাক্স কলটি যাদু করবে


4

কি সম্পর্কে:

গতিশীলভাবে # হ্যাশ ধরুন

<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;
?>

এটিকে আরও সাবলীল করতে:

শুধু জাভাস্ক্রিপ্ট এবং পিএইচপি ব্যবহার করে সম্পূর্ণ উদাহরণ

<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')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/> 

<?php echo "This is the current hash: " . $hash; ?> 

পিএইচপি এখনও হ্যাশ মান পায় না।
কর্নারোট

মিষ্টি এবং সংক্ষিপ্ত সমাধান।
ওয়ারুনা মঞ্জুলা

3

আমি মনে করি হ্যাশ-মানটি কেবল ক্লায়েন্ট-সাইড হিসাবে ব্যবহৃত হয়, সুতরাং আপনি এটি পিএইচপি দিয়ে পেতে পারবেন না।

আপনি এটি পিএইচপি যদিও জাভাস্ক্রিপ্ট সঙ্গে পুনর্নির্দেশ করতে পারে।


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

এটি কাজ করা উচিত


যদি স্ট্রিং হিসাবে আপনার কাছে ইউআরএলটি সহজ থাকে তবে আপনি রেগ এক্সপ দিয়ে পার্স করলেও easy সমস্যাটি হ'ল আপনি সার্ভার থেকে # ফটো 45 অ্যাক্সেস করতে পারবেন না (phpinfo (ব্যবহার করুন) এবং আপনি কোথাও # ফটো 45 দেখতে পাবেন না
নিক চ্যানকভ

1

একটি এর ম অংশ কোনো URI পর #/ ক্লায়েন্ট সাইড প্রক্রিয়া (দেখুন "টুকরা" বলা হয় এবং শুধুমাত্র উপলব্ধ সংজ্ঞা দ্বারা হয় https://en.wikipedia.org/wiki/Fragment_identifier )।

ক্লায়েন্ট দিকে, জাভা স্ক্রিপ্ট এর সাহায্যে এটি ব্যবহার করা যেতে পারে window.location.hash


1

হ্যা, তুমি পারো:

ত্রুটি রোধ করতে এই পদ্ধতিটি ব্যবহার করুন:

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

এবং অবশ্যই পিএইচপি-তে, সেই কুকুরছানাটিকে বিস্ফোরণ করুন এবং মানগুলির মধ্যে একটি পান

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

0

আরেকটি সমাধান হ'ল পিএইচপি পৃষ্ঠায় একটি লুকানো ইনপুট ক্ষেত্র যুক্ত করা:

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

জাভাস্ক্রিপ্ট / jQuery ব্যবহার করে আপনি পৃষ্ঠা লোড বা একটি ইভেন্টের প্রতিক্রিয়া এই ক্ষেত্রের মান সেট করতে পারেন:

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

সার্ভারে পিএইচপি-তে আপনি এই মানটি $ _POST সংগ্রহ ব্যবহার করে পড়তে পারেন:

$server_location_hash = $_POST['myHiddenLocationHash'];

0

আমরা এটি অন্য পদ্ধতির সাথেও করতে পারি, সবার আগে যেমন জেএস থেকে হ্যাশ মান পান এবং সেই পরামিতিটি ব্যবহার করে এজ্যাক্স কল করুন এবং আমরা যা চাই তা করতে পারি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.