Решение проблемы с кодировкой символов на сайте (UTF-8). Отображает иероглифы или знаки вопроса

Jeg har følgende .htaccess kode:

RewriteRule ^Indian-Patriot-Name/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+).*?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Som lar meg se resultatet av følgende lenke:

example.com/Indian-Patriot-Name/104/8/ச்வடன்ற்யவீர்%20சவர்க்கார்%20రాష్ట్రీయ%20சமரக் 

Imidlertid når jeg vil se følgende URL (ikke unicode):

example.com/Indian-Patriot-Name/104/8/abcd 

Jeg kan ikke se utdataene da jeg får en "fil ikke funnet" feil! Imidlertid, hvis jeg endrer direktivet / regex til følgende, kan jeg lese URL-en (ikke-unicode) ovenfor riktig.

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [L] 

Q. Hvordan kan jeg kombinere ([A-Za-z0-9-]+) og ([^\x00-\x7F]+) i samme omskrivingsuttalelse?

Jeg prøvde:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+)+([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

men jeg får feilen "fil ikke funnet" igjen.


OPPDATER: Jeg prøvde følgende:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Men jeg får en intern serverfeil:

Intern serverfeil Serveren fikk en intern feil eller feilkonfigurasjon og kunne ikke fullføre forespørselen din.

Ta kontakt med serveradministratoren på [email protected] for å informere dem om tidspunktet for feilen, og handlingene du utførte like før denne feilen.

Mer informasjon om denne feilen kan være tilgjengelig i serverfeilloggen.

I tillegg ble det oppstått en feil på 500 interne serverfeil mens du prøvde å bruke et ErrorDocument til å håndtere forespørselen.

  • Som med alle interne feil, sjekk loggfilene dine, Apache vil ha fortalt deg der hva som er galt (i tillegg til at det hadde søkt etter noe å vise som et 500 ErrorDocument, og det ble ikke funnet på grunn av ugyldig konfigurasjon)
  • Jeg forstår heller ikke problemet ditt. Du kan ikke "kombinere" ([A-Za-z0-9-]+) og ([^\x00-\x7F]+) som noe som samsvarer med den første spesifikasjonen ikke kan matche den andre (tegnene i den første er faktisk i \ x00- \ x7F-området som den andre vil ekskludere)
  • la meg omdefinere denne omskrivingen ([^ \ x00- \ x7F] +) fungerer bra. Hvordan kan jeg tillate A-Za-z0-9- også i ([^ \ x00- \ x7F] +)
  • 1 Fortsatt ikke klart for meg, men prøv ([^\x00-\x7F]+|[A-Za-z0-9-]+)
  • la meg definere dette på nytt. "omskriv ([^ \ x00- \ x7F] +)" fungerer bare bra for unicode. Jeg ønsker å tillate A-Za-z0-9- tegnsett i denne omskrivingsuttalelsen, dvs. Unicode og A-Za-z0-9 sammen i samme omskrivingsuttalelse
RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Jeg får intern serverfeil ...

Du har en feil rom i RewriteRule mønster. Dette vil resultere i "Intern serverfeil" siden mellomrom er avgrensere i Apache-direktiver. Hvis du sjekker feilloggen din, vil du sannsynligvis se en feil angående "Ugyldige flagg" siden indianpatriot.php?id... vil nå bli sett på som flagg argument til RewriteRule direktivet.

Imidlertid forslaget fra @PatrickMevzek i kommentarer, å bruke veksling ser ut som om det skulle ha fungert. For eksempel:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+|[A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

Vær oppmerksom på at den opprinnelige regexen din som samsvarer med unicode-nettadressen, hadde et ekstra "fange alt annet" -mønster til slutt: .*?. (Din regex som samsvarer med ikke-unicode URL har ikke dette.) Dette virker uvanlig. Hvis dette er nødvendig, kan du bare utelate $ (enden av strenganker) fra slutten av mønsteret for å gjøre det samme.

Legg også merke til at [^\x00-\x7F] er en negert karakterklasse, som samsvarer med hvilken som helst karakter ikke i byteområdet 00..7F (sekskant). For å innlemme det latinske alfabetet, som faller innenfor dette området, kan du ganske enkelt utvide dette området: [\x00-\xFF] - dette er nå et positivt område som samsvarer med alt (som uten tvil er mer enn du trenger, men du matchet sannsynligvis mer enn du trengte med den opprinnelige regexen).

Dette kan imidlertid kanskje forenkles. Hvis du bare vil matche hva som helst (unicode eller latinske tegn) på slutten av URL-en da ([^\x00-\x7F]+|[A-Za-z0-9-]+) (eller ([\x00-\xFF]+)) kunne forenkles til ([^/]+) (dvs. alt annet enn en skråstrek). Og forutsatt at du ikke har noe imot å matche understrekingskarakteren, da [A-Za-z0-9-] kunne reduseres til [\w-]. Så dette blir:

RewriteRule ^Indian-Patriot-Name-English/(\w-]+)/([\w-]+)/([^/]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA] 

fungert for deg: Charles Robertson | Ønsker du å kontakte oss?

nyttig informasjon