Attualmente sto lavorando a un'applicazione che estrae dati JSON dall'API della comunità Blizzard e la analizza con PHP. Tutto funziona bene finché non arrivo a un personaggio con un personaggio speciale nel loro nome.Caratteri speciali e riscrittura URL
Al fine di estrarre i dati dei personaggi, ho bisogno di conoscere il nome e il regno dei loro personaggi.
Ho il nome e il reame che sono passati attraverso l'URL alla pagina dei caratteri, e da lì usando queste informazioni per estrarre i dati dei personaggi.
A questo punto i miei URL sono in questo modo:
http://localhost/guildtree/characters.php?realm=argent-dawn&name=Ankzu
A questo punto se provo a tirare i dati per un personaggio con un accento vengo reindirizzato alla mia pagina di errore perché non è una valida carattere.
Non è stato fino a quando ho iniziato la riscrittura dell'URL che ho scoperto il mio problema. Sono stato reindirizzato alla mia pagina di errore perché da qualche parte lungo la linea i personaggi speciali sono stati sostituiti per alcuni personaggi davvero stupidi.
Con i miei nuovi URL riscritti follow funziona:
http://localhost/guildtree/argent-dawn/ankzu
Tuttavia, un personaggio con un carattere speciale nei loro risultati di nome in un messaggio di errore.
http://localhost/guildtree/argent-dawn/notúk
risultati del seguente messaggio di errore:
"Not Found
L'URL richiesto/guildtree/argent-alba/notúk non è stato trovato su questo server"
Come si può vedere la ú viene sostituito  °, ma quando ho copiare e incollare l'URL del ú appare come% C3% BA
E 'la mia comprensione che il motivo per cui la ú sta comparendo come º è perché l'unicode a due byte ú viene squished in due caratteri ASCII di un byte risultanti nella visualizzazione di º.
ho assicurato che tutte le mie pagine hanno la seguente nell'intestazione:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Al fine per la mia applicazione per funzionare correttamente ho bisogno di quei caratteri speciali per visualizzare correttamente, quindi ho bisogno la u per visualizzare in realtà come ú, non appare come ú ma in realtà è º o% C3% BA.
Il nome caratteri viene tirato dalla URL semplicemente come:
$charName = $_GET['name'];
E 'possibile codificare $ charName per visualizzare i caratteri speciali in modo corretto?
Ho provato tutto quello che riesco a pensare e ho cercato su Google ma non ha funzionato.
Inoltre, poiché sto utilizzando la riscrittura degli URL, quale sarebbe la regola di riscrittura per consentire questi caratteri speciali?
Ecco il mio attuale regola di riscrittura:
RewriteRule ^([a-zA-Z0-9_'-]+)/([a-zA-Z]+)$ characters.php?realm=$1&name=$2 [NC]
Sono consapevole del fatto che ([a-zA-Z] +) non consente a tutti per i caratteri speciali, ho attualmente lavorato su come ottenere il caratteri speciali da visualizzare correttamente. Se uso ([a-zA-Z \ ú] +) funzionerà e visualizzerà la pagina in quanto deve essere visualizzata. L'aggiunta di \ ú alla regola sembra un modo molto povero per farlo e non sempre funziona mentre si utilizza il carattere corrispondente per i caratteri accentati.
Qualsiasi aiuto sarebbe molto apprezzato. Se avete bisogno di ulteriori informazioni si prega di chiedere.
Edit:
cambiare la mia regola di riscrittura al di sotto permette per le informazioni di essere tirato bene, ma crea un loop di reindirizzamento per il mio CSS.
RewriteRule ^([a-zA-Z0-9_'-]+)/([^/]+)$ characters.php?realm=$1&name=$2 [NC]
Per esempio il mio CSS che viene reindirizzato a
http://localhost/guildtree/css/error
invece di
http://localhost/guildtree/css/style2.css
Aggiornamento:
Attraverso alcuni semplici test:
$charName = $_GET['name'];
$charNameTEST = utf8_encode($charName);
farà il cambiamento, ma quando applico questo alla mia pagina si tratta ancora in piedi dicendo:
"Not Found
L'URL richiesto non è stato trovato su questo server/guildtree/argent-alba/notúk ".
Penso che il problema principale ora è con il reindirizzamento dell'URL, perché i dati JSON possono essere analizzati perfettamente bene quando ha i caratteri accentati. Semplicemente non capisco perché continua a mostrarmi che è su guildtree/argent-dawn/notúk nella barra del browser, ma continua a cercare di tirare su/guildtree/argent-dawn/notõk.
E quando qualcuno inserisce direttamente l'URL? – akari
Si potrebbe anche voler considerare ASCIIfying i nomi utente. 'esempio.com/guildtree/argent-dawn/notuk /' invece di 'example.com/guildtree/argent-dawn/not% C3% BAk'. I tuoi utenti probabilmente lo troveranno più facile. –
example.com/guildtree/argent-dawn/notuk e example.com/guildtree/argent-dawn/notúk potrebbero utilizzare due set di dati completamente diversi, ma il nome del personaggio deve essere esatto. – akari