2012-08-24 27 views
7

नए सिरे से लिखना मैं वर्तमान में एक आवेदन है कि बर्फ के तूफान समुदाय एपीआई से JSON डेटा खींचती है और पीएचपी साथ यह पार्स करता है पर काम कर रहा हूँ। सब कुछ ठीक काम करता है जब तक कि मैं उनके नाम पर एक विशेष चरित्र वाले चरित्र में नहीं आ जाता।विशेष वर्ण और यूआरएल

आदेश वर्ण डेटा मैं उनके पात्रों नाम और दायरे है कि वे कर रहे हैं पता करने की जरूरत को खींचने के लिए है।

मैं नाम और दायरे चरित्र पेज के URL से पारित किया जा रहा है, और वहाँ है कि जानकारी का उपयोग चरित्र डेटा खींचने के लिए से की है। अगर मैं, क्योंकि यह एक मान्य नहीं है एक लहजे मैं हो मेरी त्रुटि पृष्ठ पर री-डायरेक्ट के साथ एक चरित्र के लिए डेटा खींचने की कोशिश इस बिंदु पर

http://localhost/guildtree/characters.php?realm=argent-dawn&name=Ankzu 

:

इस बिंदु पर अपने URL इसलिए की तरह हैं चरित्र।

यह जब तक मैं यूआरएल को फिर से लिखने कि मैं मेरी समस्या की खोज की शुरू नहीं किया गया था। मुझे अपने त्रुटि पृष्ठ पर फिर से निर्देशित किया जा रहा है क्योंकि रेखा के साथ कहीं कुछ विशेष पात्रों को वास्तव में कुछ भयानक पात्रों के लिए प्रतिस्थापित किया जा रहा है।

मेरी नई फिर से लिखा URL की सहायता से

पालन काम करता है:

http://localhost/guildtree/argent-dawn/ankzu 

हालांकि, एक त्रुटि संदेश में उनके नाम परिणामों में विशेष वर्ण के साथ एक चरित्र।

निम्न त्रुटि संदेश में
http://localhost/guildtree/argent-dawn/notúk 

परिणाम:

"। नहीं मिला

अनुरोधित URL/guildtree/रजत-भोर/notúk इस सर्वर पर नहीं मिला था"

यह मेरी समझ है कि कारण है कि ú ú के रूप में दिखाई दे रहा है के रूप में आप देख सकते हैं ú ú के लिए प्रतिस्थापित किया जा रहा है, लेकिन जब मैं URL कॉपी करके पेस्ट ú% C3% बीए के रूप में प्रकट ऐसा इसलिए है क्योंकि दो बाइट यूनिकोड ú को दो बाइट ASCII वर्णों में घुमाया जा रहा है जिसके परिणामस्वरूप ú प्रदर्शित किया जा रहा है।

मैं सुनिश्चित किया है कि मेरे सभी पृष्ठों शीर्षक में निम्नलिखित है:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
अपने आवेदन ठीक से काम करने मैं ठीक से प्रदर्शित करने के लिए उन विशेष वर्ण की जरूरत है, तो मैं यू की जरूरत वास्तव में प्रदर्शित करने के लिए आदेश में

के रूप में, ú के रूप में दिखाई नहीं दे रहा है, लेकिन वास्तव में º या% सी 3% बीए हो।

पात्रों नाम URL से खींचा जा रहा है बस के रूप में:

$charName = $_GET['name']; 

यह $ charName ठीक से विशेष वर्ण प्रदर्शित करने के लिए सांकेतिक शब्दों में बदलना संभव है?

मैं सब कुछ मैं के बारे में सोच सकते हैं की कोशिश की है और गूगल पर खोज की है लेकिन कुछ भी काम किया है।

इसके अलावा

, क्योंकि मैं यूआरएल को फिर से लिखने का उपयोग कर रहा क्या पुनर्लेखन नियम इन विशेष वर्णों के लिए अनुमति देने के लिए हो सकता है?

यहाँ मेरे वर्तमान पुनर्लेखन नियम है:

RewriteRule ^([a-zA-Z0-9_'-]+)/([a-zA-Z]+)$  characters.php?realm=$1&name=$2  [NC] 

मुझे पता है कि ([a-zA-Z] +) सब पर विशेष वर्णों के लिए अनुमति नहीं है हूँ, मैं वर्तमान में हो रही पर काम कर रहा है ठीक से प्रदर्शित करने के लिए विशेष पात्र। अगर मैं ([ए-जेए-जेड \ º] +) का उपयोग करता हूं तो यह पृष्ठ को प्रदर्शित और प्रदर्शित करेगा क्योंकि इसे प्रदर्शित करने की आवश्यकता है। नियम में \ ú जोड़ना ऐसा करने के लिए एक बहुत ही खराब तरीका लगता है और उच्चारण अक्षरों के लिए संबंधित चरित्र का उपयोग करते समय हमेशा काम नहीं करता है।

किसी भी मदद की सराहना की जाएगी। अगर आपको कोई और जानकारी चाहिए तो कृपया पूछें।

संपादित करें:

नीचे करने के लिए अपने पुनर्लेखन नियम बदलने की अनुमति देता है के लिए जानकारी ठीक खींचा जा करने के लिए, लेकिन मेरे सीएसएस के लिए एक रीडायरेक्ट लूप पैदा करता है। कुछ सरल परीक्षण के माध्यम से

:

RewriteRule ^([a-zA-Z0-9_'-]+)/([^/]+)$  characters.php?realm=$1&name=$2 [NC] 

उदाहरण के लिए मेरी सीएसएस

http://localhost/guildtree/css/error 
बजाय

http://localhost/guildtree/css/style2.css 

अद्यतन पर पुनः निर्देशित किया जा रहा है

$charName = $_GET['name']; 
$charNameTEST = utf8_encode($charName); 

परिवर्तन करना होगा, लेकिन जब मैं अपने पृष्ठ के लिए इस पर लागू यह अभी भी कह रही है ऊपर आता है:

"नहीं मिला

अनुरोध यूआरएल/guildtree/रजत-भोर/notúk इस सर्वर पर नहीं मिला था । "

मुझे लगता है कि अब मुख्य मुद्दा यूआरएल रीडायरेक्टिंग के साथ है, क्योंकि जेएसओएन डेटा को उच्चारण किए गए वर्ण होने पर पूरी तरह ठीक से पार्स किया जा सकता है। मुझे समझ में नहीं आता कि यह मुझे क्यों दिखाता है कि यह ब्राउज़र बार में गिल्डट्री/अर्जेंट-डॉन/नोटक पर है, लेकिन खींचने/गिल्डट्री/अर्जेंट-डॉन/नोटएक करने की कोशिश करता रहता है।

उत्तर

3

URL एक यूआरएल के लिए मान्य चरित्र नहीं है।

जहां भी आप उपयोगकर्ता नाम लिंक करते हैं, तो आपको इसे यूआरएल-एन्कोड करना चाहिए।

इसलिए सही URL को इंगित करने के लिए है:

http://localhost/guildtree/argent-dawn/not%C3%BAk 

आप के रूप में php में इसे प्रिंट करना चाहिए:

echo '<a href="http://localhost/guildtree/argent-dawn/'. urlencode($name) .'">Link</a>; 
+0

जब कोई व्यक्ति सीधे यूआरएल में प्रवेश करता है तो क्या होगा? – akari

+0

आप उपयोगकर्ता नाम ASCIIfying पर भी विचार करना चाहेंगे। 'example.com/guildtree/argent-dawn/notuk /' example.com/guildtree/argent-dawn /%% C3% BAK के बजाय ''। आपके उपयोगकर्ताओं को शायद यह आसान लगेगा। –

+0

example.com/guildtree/argent-dawn/notuk और example.com/guildtree/argent-dawn/notúk डेटा के दो पूरी तरह से अलग सेट खींचेंगे हालांकि, चरित्र का नाम सटीक होना चाहिए। – akari

2

मुझे लगता है कि this question आपका जवाब हो सकता है। मैं नहीं अपने आप को इस की कोशिश की है, लेकिन मैं क्या देख सकते हैं से, आप के रूप में अपने फिर से लिखना के पुनर्लेखन के लिए आवश्यकता होगी:

RewriteRule ^([a-zA-Z0-9_'-]+)/([a-zA-Z]+)$  characters.php?realm=$1&name=$2  [NC,B] 

बी झंडा कि विशेष वर्ण यूआरएल एसकेप्ड सुनिश्चित करेंगे, तो $ 2 में नाम से देखा मूल्य मूल्य एन्कोड किया जाएगा। चूंकि आप रीडायरेक्ट नहीं कर रहे हैं, इसलिए मूल यूनिकोड वर्ण अभी भी यूआरएल में प्रदर्शित होना चाहिए।

आपको यह सुनिश्चित करने के लिए रेगेक्स में कुछ बदलावों की भी आवश्यकता होगी ताकि यह यूनिकोड वर्णों से मेल खा सके। मुझे यकीन नहीं है कि वे क्या होंगे।

unicode characters work in URLs over here के बारे में कुछ और विवरण भी है।

+0

मैंने इसे बांध दिया, लेकिन यह एक आंतरिक सर्वर त्रुटि बना रहा है। संपादित करें: एक टाइपो था, अब कोई आंतरिक त्रुटि नहीं है, लेकिन अभी भी काम नहीं कर रहा है। – akari

2

इसे ठीक से काम करने के लिए आपको दो चीजें करने की आवश्यकता है।

सबसे पहले तो जैसे अपनी .htaccess में जोड़ना

AddDefaultCharset On 
AddDefaultCharset UTF-8 
AddCharset UTF-8 .tpl 
AddCharset UTF-8 .js 
AddCharset UTF-8 .css 
AddCharset UTF-8 .php 

दूसरे आपका रीराइट नियम का हिस्सा करने के लिए विशेष वर्णों की अनुमति की जरूरत है कि बदलाव (*।):

RewriteRule ^([a-zA-Z0-9_'-]+)/(.*)$  characters.php?realm=$1&name=$2  [NC] 

हो जाएगा ताकि अन्य पृष्ठों के लिए कुछ रीडायरेक्ट लूप का कारण बनता है, लेकिन मैं फिलहाल इसे ठीक करने पर काम कर रहा हूं।

संबंधित मुद्दे