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

Man ir šādi .htaccess kods:

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] 

Kas ļauj man apskatīt šīs saites rezultātu:

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

Tomēr, kad es vēlos apskatīt šo URL (nevis unikodu):

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

Es nevaru apskatīt izvadi, jo es saņemu kļūdu "fails nav atrasts"! Tomēr, ja es mainu direktīvu / regex uz šādu, es varu pareizi izlasīt iepriekš minēto (ne unicode) URL.

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. Kā es varu apvienot ([A-Za-z0-9-]+) un ([^\x00-\x7F]+) tajā pašā pārrakstīšanas paziņojumā?

ES mēģināju:

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] 

bet es atkal saņemu kļūdu "fails nav atrasts".


ATJAUNINĀT: Es izmēģināju sekojošo:

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] 

Bet man rodas iekšēja servera kļūda:

Iekšējā servera kļūda Serverī radās iekšēja kļūda vai nepareiza konfigurācija, un tas nevarēja izpildīt jūsu pieprasījumu.

Lūdzu, sazinieties ar servera administratoru vietnē [email protected], lai informētu viņus par kļūdas rašanās laiku un darbībām, kuras veicāt tieši pirms šīs kļūdas.

Plašāka informācija par šo kļūdu var būt pieejama servera kļūdu žurnālā.

Mēģinot izmantot ErrorDocument, lai apstrādātu pieprasījumu, tika konstatēta 500 iekšējās servera kļūdas kļūda.

  • Tāpat kā ar visām iekšējām kļūdām, pārbaudiet savus žurnālfailus, arī Apache tur jums pateiks, kas ir nepareizi (papildus tam, ka tas ir meklējis kaut ko parādīt kā 500 ErrorDocument un tas netika atrasts nepareizas konfigurācijas dēļ)
  • Es arī nesaprotu jūsu problēmu. Jūs nevarat "apvienot" ([A-Za-z0-9-]+) un ([^\x00-\x7F]+) tā kā kaut kas atbilst pirmajai specifikācijai, tas nevar sakrist ar otro (pirmās rakstzīmes patiešām ir \ x00- \ x7F diapazonā, ko otra vēlas izslēgt)
  • ļaujiet man no jauna definēt šo pārrakstīšanu ([^ \ x00- \ x7F] +) darbojas labi. Kā es varu atļaut arī A-Za-z0-9- ([^ \ x00- \ x7F] +)
  • 1 Man joprojām nav skaidrs, bet mēģiniet ([^\x00-\x7F]+|[A-Za-z0-9-]+)
  • ļaujiet man to no jauna definēt. "rewrite ([^ \ x00- \ x7F] +)" darbojas labi tikai unikoda gadījumā. Es vēlos atļaut šajā rakstīšanas paziņojumā atļaut rakstzīmju kopu A-Za-z0-9, t.i., Uniode un A-Za-z0-9 kopā tajā pašā pārrakstīšanas paziņojumā
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] 

Es saņemu iekšēju servera kļūdu ...

Jums ir kļūdains telpa iekš RewriteRule modeli. Tā rezultātā jūsu iekšējā servera kļūda būs kopš atstarpes ir Apache direktīvu atdalītāji. Pārbaudot kļūdu žurnālu, iespējams, redzēsit kļūdu par “Nederīgiem karodziņiem” kopš tā laika indianpatriot.php?id... tagad tiks uzskatīts par karogi arguments RewriteRule direktīvu.

Tomēr @PatrickMevzek ieteikums komentāros izmantot pārmaiņus izskatās, it kā tam būtu bijis jāstrādā. Piemēram:

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] 

Ņemiet vērā, ka sākotnējā regex, kas atbilst unikoda URL, beigās bija papildu paraugs “noķert visu pārējo”: .*?. (Jūsu regex, kas atbilst URL, kas nav unikoda URL, šī nav.) Tas šķiet neparasti. Ja tas ir nepieciešams, varat vienkārši izlaist $ (virknes enkura beigas) no modeļa beigām darīt to pašu.

Ņemiet vērā arī to [^\x00-\x7F] ir noliegts rakstzīmju klase, kas atbilst jebkuram rakstzīmei baitu diapazonā 00..7F (sešstūris). Lai iekļautu latīņu alfabētu, kas ietilpst šajā diapazonā, jūs varat vienkārši paplašināt šo diapazonu: [\x00-\xFF] - tas tagad ir pozitīvs diapazons, kas atbilst visam (kas, bez šaubām, ir vairāk nekā jums nepieciešams, bet jūs, iespējams, sākotnējam regulāram variantam pielāgojāt vairāk nekā nepieciešams).

Tomēr to varbūt varētu vienkāršot. Ja jūs vienkārši vēlaties saskaņot jebko (unikoda vai latīņu rakstzīmes) URL beigās ([^\x00-\x7F]+|[A-Za-z0-9-]+) (vai pat ([\x00-\xFF]+)) varētu vienkāršot līdz ([^/]+) (ti, jebkas, izņemot slīpsvītru). Tad, ja jums nav iebildumu, pieskaņojiet arī pasvītrojuma rakstzīmi [A-Za-z0-9-] varētu samazināt līdz [\w-]. Tātad, tas kļūst:

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

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?

noderīga informācija