AJAX, എൻകോഡിംഗ് പ്രശ്നങ്ങൾ. അജാക്സും വിൻഡോസ് 1251 എൻകോഡിംഗിലെ പ്രശ്നങ്ങളും വിള്ളലുകൾ അയയ്ക്കുന്നു

വെബ്‌സൈറ്റ് വികസനം എന്ന വിഷയം ഞാൻ ആദ്യമായി പഠിക്കാൻ തുടങ്ങിയപ്പോൾ, ഹാക്കുകൾ എൻ്റെ സ്ഥിരമായ പ്രശ്‌നങ്ങളിലൊന്നായിരുന്നു. ഞാൻ ഒരു HTML പേജ് സൃഷ്ടിച്ചു - ബ്രൗസറിൽ krakozyabry, ഡെൻവർ ഇൻസ്റ്റാൾ ചെയ്യുകയും PHP-യിൽ ഒരു സൈറ്റ് സൃഷ്ടിക്കാൻ ശ്രമിക്കുകയും ചെയ്തു - വീണ്ടും krakozyabry അക്ഷരങ്ങൾക്ക് പകരം. ഞാൻ ഒരു വിദേശ തീം ഡൗൺലോഡ് ചെയ്തു, ഡാറ്റാബേസുമായി ബന്ധിപ്പിച്ചിരിക്കുന്നു - അതേ പ്രശ്നം.

എൻ്റെ വെബ്‌സൈറ്റുകളിൽ, ഞാൻ സാധാരണയായി UTF-8 ഉപയോഗിക്കുന്നു (ഇത് ഒരു ടെക്‌സ്‌റ്റ് എൻകോഡിംഗ് ആണ്, യൂണികോഡ് എന്നും വിളിക്കുന്നു), അതിനാൽ ഈ ലേഖനത്തിലെ എല്ലാ ഉദാഹരണങ്ങളിലും ഇത് ഉണ്ടായിരിക്കും.

1. BOM ഇല്ലാതെ UTF-8

ഏറ്റവും ലളിതമായ പ്രശ്നത്തിൽ നിന്ന് നമുക്ക് ആരംഭിക്കാം. നിങ്ങൾ കുറച്ച് HTML ഫയൽ സൃഷ്‌ടിച്ചു, അത് ബ്രൗസറിൽ തുറന്ന് ലഭിച്ചു:

ക്രാക്കോസിയാബ്രി (എൻകോഡിംഗിലെ പ്രശ്നം).

ഈ പ്രശ്നം പ്രധാനമായും Windows ഉപയോക്താക്കൾക്ക് പ്രസക്തമാണ്;

പ്രശ്നത്തിനുള്ള പരിഹാരം പ്രധാനമായും നിങ്ങൾ ഏത് എഡിറ്ററാണ് ഉപയോഗിക്കുന്നത് എന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു. വിൻഡോസ് ഉപയോക്താക്കൾക്ക്, സൗജന്യ ആകർഷണീയമായ നോട്ട്പാഡ്++ ഞാൻ ശുപാർശ ചെയ്യുന്നു.

അതിനാൽ, നോട്ട്പാഡ്++-ൽ ഫയൽ തുറന്ന് എൻകോഡിംഗുകൾ > BOM ഇല്ലാതെ UTF-8-ലേക്ക് പരിവർത്തനം ചെയ്യുക.

ചോദ്യം - എന്തുകൊണ്ട് BOM ഇല്ലാതെ? കാരണം BOM ഉപയോഗിച്ച് നിങ്ങൾ നിരന്തരം ശൂന്യമായ പ്രതീകങ്ങൾ ചേർക്കും (വാസ്തവത്തിൽ, അവ ശൂന്യമല്ല, അവയ്‌ക്കും അവരുടേതായ പ്രവർത്തനമുണ്ട്, പക്ഷേ ഈ സാഹചര്യത്തിൽ ഞങ്ങൾക്ക് ഇത് ആവശ്യമില്ല) അത് ആവശ്യമില്ലാത്തിടത്ത്, കൂടാതെ PHP-ക്ക് ഇത് ഇതിനകം തന്നെ നിർണായകമാണ്.

2. മെറ്റാ ടാഗ് ചാർസെറ്റ്

മുമ്പത്തെ ഘട്ടത്തിൽ ഞാൻ വിവരിച്ച കാര്യങ്ങൾ നിങ്ങൾ ചെയ്യുകയും നിങ്ങളുടെ പ്രശ്നം പരിഹരിച്ചില്ലെങ്കിൽ, വിള്ളലുകൾ ഇല്ലാതാക്കുന്നതിനുള്ള രണ്ടാമത്തെ രീതി പരീക്ഷിക്കാൻ സമയമായി.

സൈറ്റ് ടാഗുകൾക്കിടയിൽ ഇനിപ്പറയുന്ന കോഡ് ഒട്ടിക്കുക മാത്രമാണ് ഞങ്ങൾ ചെയ്യേണ്ടത്. ഒന്നാമതായി, നിങ്ങൾക്ക് ഇതിനകം ഈ മെറ്റാ ടാഗ് ഉണ്ടോയെന്ന് പരിശോധിക്കുക. അതെ എങ്കിൽ, ചാർസെറ്റ് പാരാമീറ്ററിൻ്റെ മൂല്യം നോക്കുക.

3.htaccess

റഷ്യൻ അക്ഷരങ്ങൾ ഇപ്പോഴും വൃത്തികെട്ട അക്ഷരങ്ങളായി പ്രദർശിപ്പിച്ചിട്ടുണ്ടെങ്കിൽ, സൈറ്റിൻ്റെ റൂട്ടിലുള്ള നിങ്ങളുടെ .htaccess തുറന്ന് ഒരു പുതിയ വരിയിൽ ഇത് ചേർക്കുക:

പ്രധാനം! സൈറ്റ് പേജിൽ എന്തെങ്കിലും പ്രദർശിപ്പിക്കുന്നതിന് മുമ്പ് ഈ കോഡ് ചേർക്കണം, അല്ലാത്തപക്ഷം ഒരു പിശക് ഉണ്ടാകും.

5. ഒരു ലൈൻ ട്രിം ചെയ്യുമ്പോൾ അവസാന പ്രതീകത്തിലെ പ്രശ്നങ്ങൾ

ഈ പ്രശ്നം എങ്ങനെ പരിഹരിക്കാം?

എളുപ്പം - കോഡിലെ substr() ഫംഗ്‌ഷൻ കണ്ടെത്തി അതിനെ mb_substr() ആയി മാറ്റുക മാത്രമാണ് വേണ്ടത്.

6. MySQL

ഒന്നിലധികം തവണ ഞാൻ MySQL-ലേക്ക് കണക്റ്റുചെയ്‌ത് കുറച്ച് ഡാറ്റ പുറത്തെടുത്തു, അത് സൈറ്റിൽ പ്രദർശിപ്പിക്കുമ്പോൾ, ടെക്‌സ്‌റ്റ് ക്രാപ്പി ടെക്‌സ്‌റ്റായി പ്രദർശിപ്പിക്കപ്പെട്ടു.

02/21/15 7.1K

മൈക്രോസോഫ്റ്റ് കോർപ്പറേഷൻ നിർമ്മിക്കുന്ന സോഫ്റ്റ്‌വെയർ ഉൽപ്പന്നങ്ങളുടെ റസിഫിക്കേഷനായി 90-കളുടെ തുടക്കത്തിൽ വിൻഡോസ് 1251 എൻകോഡിംഗ് സൃഷ്ടിച്ചു:


എൻകോഡിംഗ് 8-ബിറ്റ് ആണ്, കൂടാതെ റഷ്യൻ, ബെലാറഷ്യൻ, ഉക്രേനിയൻ, ബൾഗേറിയൻ, മാസിഡോണിയൻ, സെർബിയൻ എന്നിവ ഉൾപ്പെടുന്ന സ്ലാവിക് ഭാഷാ ഗ്രൂപ്പിൽ നിന്നുള്ള പ്രതീകങ്ങൾ ഉൾപ്പെടുന്നു - ഇത് മറ്റ് സിറിലിക് എൻകോഡിംഗുകളെ അപേക്ഷിച്ച് ഒരു നേട്ടം നൽകുന്നു (ISO 8859-5, KOI8-R, CP866) . എന്നിരുന്നാലും, 1251 എൻകോഡിംഗിന് കാര്യമായ ദോഷങ്ങളുമുണ്ട്:
  • 0xFF (25510) എന്നത് "i" പ്രതീകത്തിനായി കരുതിവച്ചിരിക്കുന്ന കോഡാണ്. ശുദ്ധമായ 8th ബിറ്റ് പിന്തുണയ്ക്കാത്ത പ്രോഗ്രാമുകൾ പലപ്പോഴും പ്രവചനാതീതമായ പ്രശ്നങ്ങൾ നേരിടുന്നു;
  • KOI8, CP866-ൽ ഉള്ള വ്യാജ ഗ്രാഫിക്സ് ഒന്നുമില്ല.

ഇനിപ്പറയുന്നവ കോഡ് പേജ് 1251 അല്ലെങ്കിൽ CP1251-ൽ നിന്നുള്ള പ്രതീകങ്ങളാണ് (അക്ഷരങ്ങൾക്ക് താഴെയുള്ള അക്കങ്ങൾ യൂണിക്കോഡിലെ അതേ പ്രതീകത്തിൻ്റെ ഹെക്സാഡെസിമൽ കോഡാണ്):

html-ൽ Windows 1251 എൻകോഡിംഗ്

പലപ്പോഴും, വിവിധ യോഗ്യതകളുള്ള വെബ് ഡെവലപ്പർമാർക്കും ബ്ലോഗർമാർക്കും പേജ് എൻകോഡിംഗിൽ ഒരു പ്രശ്നമുണ്ട്: തയ്യാറാക്കിയ വാചകത്തിന് പകരം, അജ്ഞാതവും വായിക്കാൻ കഴിയാത്തതുമായ പ്രതീകങ്ങൾ പ്രത്യക്ഷപ്പെടുന്നു. ഈ പ്രശ്നം നേരിടാൻ, "പേജ് എൻകോഡിംഗ്" എന്ന പദത്തിൻ്റെ സാരാംശം നിങ്ങൾ മനസ്സിലാക്കേണ്ടതുണ്ട്.

കമ്പ്യൂട്ടറിൻ്റെ മെമ്മറിയിലെ ടെക്‌സ്‌റ്റ് ഒരു നിശ്ചിത എണ്ണം ബൈറ്റുകളായി സൂക്ഷിക്കുന്നു, അല്ലാതെ അത് ഒരു ടെക്‌സ്‌റ്റ് എഡിറ്ററിൽ പ്രദർശിപ്പിക്കുന്ന രൂപത്തിലല്ല. ഓരോ ബൈറ്റും ഒരു പ്രതീകവുമായി പൊരുത്തപ്പെടുന്ന ഒരു കോഡാണ്. ഒരു പേജിലെ ടെക്‌സ്‌റ്റ് ശരിയായി പ്രദർശിപ്പിക്കുന്നതിന്, അത് ഡീക്രിപ്റ്റ് ചെയ്യാനും പ്രദർശിപ്പിക്കാനും ഏത് കോഡ് ടേബിളാണ് ഉപയോഗിക്കേണ്ടതെന്ന് നിങ്ങൾ ബ്രൗസറിനോട് പറയേണ്ടതുണ്ട്.

എൻകോഡിംഗ് പട്ടിക സാർവത്രികമല്ല, അതായത്, വാചകം ഡീക്രിപ്റ്റ് ചെയ്യുന്നതിന് നിങ്ങൾ പ്രതീക എൻകോഡിംഗുമായി പൊരുത്തപ്പെടുന്ന ഒന്ന് ഉപയോഗിക്കണം:


ബ്രൗസറിൽ HTML പ്രമാണം ശരിയായി പ്രദർശിപ്പിക്കുന്നതിന്, ഉപയോഗിച്ച എൻകോഡിംഗ് നിങ്ങൾ വ്യക്തമാക്കണം. ഇത് ഇനിപ്പറയുന്ന രീതിയിൽ ചെയ്യുന്നു:

- ടാഗിനും ക്ലോസിംഗ് ടാഗിനും ഇടയിൽ - ഈ വരിയെ അടിസ്ഥാനമാക്കി, പേജിൽ വാചകം പ്രദർശിപ്പിക്കുന്നതിന് ബ്രൗസർ റഷ്യൻ അക്ഷരമാലയിലെ പ്രതീകങ്ങൾ ഉപയോഗിക്കും.

PHP-യിൽ വിൻഡോസ് 1251 എൻകോഡിംഗ്

ഡാറ്റാബേസിൽ സംഭരിച്ചിരിക്കുന്ന വിവരങ്ങളുടെ ഒരു ഭാഗം സാമ്പിൾ ചെയ്ത് ഉപയോഗിച്ചാണ് പേജുകൾ സൃഷ്ടിക്കുന്നത് എന്നത് രഹസ്യമല്ല. PHP-യിൽ ഒരു വെബ്സൈറ്റ് എഴുതുമ്പോൾ, മിക്കപ്പോഴും ഇത് mysql ആണ്:


പലപ്പോഴും, ഹോസ്റ്റിംഗ് മാറ്റുമ്പോൾ, ഒരു പ്രശ്നം ഉയർന്നുവരുന്നു: ഡാറ്റാബേസിലും പേജ് ടെംപ്ലേറ്റുകളിലും വിവരങ്ങളുടെ വ്യത്യസ്ത എൻകോഡിംഗുകൾ. ഇക്കാരണത്താൽ, ഒരു ജനറേറ്റഡ് പേജിൽ ഒരേസമയം നിരവധി എൻകോഡിംഗുകൾ അടങ്ങിയിരിക്കാം. സൈറ്റിലെ വിവരങ്ങൾ വിൻഡോസ് 1251 എൻകോഡിംഗിൽ അവതരിപ്പിച്ചിട്ടുണ്ടെങ്കിൽ, വിൻ 1251 എൻകോഡിംഗ് അവതരിപ്പിച്ചിരിക്കുന്ന ഒരു പട്ടിക ഉപയോഗിച്ച് ഡാറ്റാബേസിൽ നിന്നുള്ള വായന നടത്തണം.

ഡീക്രിപ്ഷൻ അംഗീകരിക്കുന്നതിന്, mysql_query("SET NAMES cp1251") ഫംഗ്ഷൻ എക്സിക്യൂട്ട് ചെയ്യേണ്ടത് ആവശ്യമാണ് - ഇതിനർത്ഥം cp1251 ടേബിൾ അനുസരിച്ച് മെഷീൻ കോഡിൽ നിന്നുള്ള പരിവർത്തനം നടക്കുമെന്നാണ്.

htaccess-ൽ Windows 1251 എൻകോഡിംഗ്

ഒരു വെബ്‌സൈറ്റ് സൃഷ്‌ടിക്കുമ്പോൾ, ടെംപ്ലേറ്റുകളിലും ഡാറ്റാബേസുകളിലും മുമ്പ് എൻകോഡിംഗുകൾ കോൺഫിഗർ ചെയ്‌തിരിക്കുമ്പോൾ, ബ്രൗസറിലെ വിവരങ്ങളുടെ തെറ്റായ പ്രദർശനത്തിൻ്റെ പ്രശ്‌നം ഇപ്പോഴും ഉയർന്നുവന്നേക്കാം.

രസകരമായ പേൾ പരിഹാരങ്ങൾ. ചോദ്യങ്ങളും ഉത്തരങ്ങളും UTF-8-ൽ നിന്ന് Windows-1251-ലേക്ക് ഒരു സ്ട്രിംഗ് എങ്ങനെ പരിവർത്തനം ചെയ്യാം?

കുറഞ്ഞത് 4 ഓപ്ഷനുകൾ ഉണ്ട്:

1. നിങ്ങളുടെ സ്വന്തം പരിവർത്തന നടപടിക്രമം എഴുതുക.
ഈ സാഹചര്യത്തിൽ, അൽഗോരിതം പഠിക്കാൻ നിങ്ങൾ സമയം ചെലവഴിക്കേണ്ടിവരും.

2. നിങ്ങൾക്ക് Convert ::Cyrillic മൊഡ്യൂൾ ഉപയോഗിക്കാം, എന്നാൽ ഇത് Unicode ::Map8 മൊഡ്യൂളിനെ ആശ്രയിച്ചിരിക്കുന്നു, അത് *nix-ന് കീഴിൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ എളുപ്പമാണ്, എന്നാൽ ActiveState Perl 5.8-ന് കീഴിൽ മൊഡ്യൂൾ കണ്ടെത്തുന്നതിൽ പ്രശ്നങ്ങൾ ഉണ്ടാകാം.

3. നിങ്ങൾക്ക് ടെക്സ്റ്റ് ::Iconv മൊഡ്യൂൾ ഉപയോഗിക്കാം, ഇത് Perl 5.6 നും Perl 5.8 നും ലഭ്യമാണ്.

എൻ്റെ $unicodeTextHere; # വേരിയബിളിനെ സജ്ജമാക്കുന്ന ഏതെങ്കിലും പ്രവർത്തനങ്ങൾ # ... # $unicodeTextഇവിടെ UTF-8 എൻകോഡിംഗിലെ ടെക്‌സ്‌റ്റിലേക്ക് ടെക്‌സ്‌റ്റ് ഉപയോഗിക്കുക::Iconv; എൻ്റെ $കൺവെർട്ടർ = ടെക്സ്റ്റ്::Iconv->പുതിയ("UTF-8", "WINDOWS-1251"); എൻ്റെ $winTextHere = $converter->convert($unicodeTextHere); # $winTextHere-ൽ Windows-1251 എൻകോഡിംഗിലെ വാചകം അടങ്ങിയിരിക്കുന്നു

4. നിങ്ങൾ Perl 5.8 ആണ് ഉപയോഗിക്കുന്നതെങ്കിൽ, എൻകോഡ് ഉപയോഗിച്ച് പരിവർത്തനം ചെയ്യാവുന്നതാണ്:

എൻ്റെ $unicodeTextHere; # വേരിയബിളിനെ സജ്ജമാക്കുന്ന ഏതെങ്കിലും പ്രവർത്തനങ്ങൾ # ... # $unicodeTextഇവിടെ UTF-8 എൻകോഡിംഗിലെ ടെക്സ്റ്റിലേക്ക് എൻകോഡ് ഉപയോഗിക്കുക; എൻകോഡ്::from_to($unicodeTextHere, "utf-8", "windows-1251"); # ഇപ്പോൾ $unicodeTextHere-ൽ Windows-1251 എൻകോഡിംഗിലെ വാചകം അടങ്ങിയിരിക്കുന്നു

സൈറ്റ് സന്ദർശകരിൽ നിന്നുള്ള അഭിപ്രായങ്ങൾ
ദിമിത്രി 25.01.2012 15:46





ഒന്നര വർഷമായി, എൻകോഡിംഗുകളിലും മറ്റും പ്രശ്നങ്ങളുടെ കൃത്രിമത്വത്തെക്കുറിച്ചുള്ള ഒരു കുറിപ്പ് ഡ്രാഫ്റ്റുകളിൽ പൊടി ശേഖരിക്കുന്നു. അജാക്സ്.
ഓരോ തവണയും സമാന സ്വഭാവമുള്ള ചോദ്യങ്ങൾ ഫോറങ്ങളിൽ ഉയർന്നുവരുമ്പോൾ, "എൻകോഡിംഗ്, അജാക്സ്, പ്രശ്നം" എന്ന ചോദ്യങ്ങൾക്കായി ബ്ലോഗിലേക്കുള്ള സന്ദർശനങ്ങൾ വർദ്ധിക്കുമ്പോഴെല്ലാം ഒരു ലിങ്ക് നൽകാൻ ഞാൻ ആഗ്രഹിച്ചു, പക്ഷേ അത് പ്രസിദ്ധീകരിക്കാൻ ഞാൻ ആഗ്രഹിച്ചു. പോസ്റ്റ് ഇതുവരെ പൂർത്തിയായിട്ടില്ല, എനിക്ക് കുറച്ച് കൂടി ചേർക്കേണ്ടതുണ്ട് ...
എന്നാൽ ഇന്ന് അതിശയകരമാംവിധം സമാനമായ ഒരു പോസ്റ്റ് പ്രത്യക്ഷപ്പെട്ടു - ajax, cp1251. ഉള്ളടക്കത്തിൽ സമാനമാണ്, എന്നാൽ അർത്ഥത്തിൽ തികച്ചും വിപരീതമാണ്.
അതിനാൽ, എൻ്റെ ഡ്രാഫ്റ്റ് ഇല്ലാതാക്കാനും fxposter-ൻ്റെ ഉപദേശത്തിൻ്റെ വിമർശനത്തിൻ്റെ രൂപത്തിൽ എൻ്റെ "സത്യം" പറയാനും ഞാൻ തീരുമാനിച്ചു.

അജാക്സ് വഴി ലഭിച്ച ഡാറ്റയുടെ ഡിഫോൾട്ട് എൻകോഡിംഗ് UTF-8 ആണെന്നത് രഹസ്യമല്ല.

യഥാർത്ഥത്തിൽ അതൊരു രഹസ്യമാണ്. പലർക്കും ഒരു രഹസ്യം. എന്തുകൊണ്ടാണ് ഇത് ഇങ്ങനെയെന്ന് പലർക്കും മനസ്സിലാകുന്നില്ല.
ASCII അല്ലാത്ത എല്ലാ സീക്വൻസുകൾക്കുമായുള്ള ജാവാസ്ക്രിപ്റ്റിലെ സ്ട്രിംഗുകളുടെ (കൂടാതെ റെഗുലർ എക്സ്പ്രഷനുകൾ) ആന്തരിക പ്രാതിനിധ്യം UTF-8 ആണ്.
ഇവിടെയാണ് വിളിക്കപ്പെടുന്നത് "പ്രശ്നം" - എൻകോഡിംഗ് വ്യക്തമായി വ്യക്തമാക്കിയിട്ടില്ലെങ്കിൽ ഒരു നോൺ-ലാറ്റിൻ അക്ഷരമാല ഉപയോഗിക്കുകയാണെങ്കിൽ, അത് ഒരു utf-8 ക്രമമായി വ്യാഖ്യാനിക്കപ്പെടും.

അപ്‌ഡേറ്റ് 29.11 ശുദ്ധവായുവും ഡേവിഡ് മസാരെയുല്യനും തീക്ഷ്ണതയെ തണുപ്പിച്ചു, അതിനാൽ കൃത്യമായി എന്താണ് ചുവടെ ചർച്ച ചെയ്യേണ്ടതെന്ന് വ്യക്തമാക്കാൻ ഞാൻ തിടുക്കം കൂട്ടുന്നു.
അതിനാൽ - സിംഗിൾ-ബൈറ്റ് എൻകോഡിംഗിൽ നിങ്ങൾക്ക് ഒരു നിശ്ചിത ഉറവിടമുണ്ട് (ഒരു ഭാഗ്യം പറയുന്ന ആളിലേക്ക് പോകരുത്, അത് വിൻഡോസ്-1251 ആയിരിക്കും) കൂടാതെ AJAX എന്ന പുതിയ buzzword മാസ്റ്റേഴ്സ് ചെയ്യുന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് ആശങ്കയുണ്ട്. അൽപ്പം വായിച്ചതിനുശേഷം, നിങ്ങൾ ഈ ദിശയിലേക്കുള്ള ആദ്യത്തെ ഭയങ്കരമായ ചുവടുകൾ എടുക്കുകയും ഉടൻ തന്നെ ഒരു "ബേബി റേക്കിൽ" ചുവടുവെക്കുകയും ചെയ്യുക, തുടർന്ന്, അൽപ്പം ശ്വാസം പിടിച്ചതിന് ശേഷം, സഹായത്തിനായി നിലവിളിച്ചുകൊണ്ട് ഫോറങ്ങളിലേക്ക് ഓടുക. അവർ നിങ്ങൾക്ക് ഈ സഹായം നൽകും - അവർ പറയുന്നു, നിങ്ങളുടെ റിസോഴ്‌സ് utf-8-ൽ റീമേക്ക് ചെയ്യുക... തീർച്ചയായും, നിങ്ങൾ പറയുകയും അത് വീണ്ടും ചെയ്യാൻ പോകുകയും ചെയ്യും...
അത്തരം ധീരമായ നടപടികൾക്കെതിരെ മുന്നറിയിപ്പ് നൽകാൻ ഞാൻ ആഗ്രഹിക്കുന്നു.

എല്ലാവരും മത്സരിച്ച് ഉപദേശിക്കുന്ന സ്റ്റാൻഡേർഡ് സൊല്യൂഷൻ, "utf-8 ഉപയോഗിക്കുക, പ്രശ്‌നങ്ങളൊന്നുമില്ല" എന്നതാണ്.

ഉപദേശകർ പറയുന്നത് ശരിയാണ് - ശരിക്കും പ്രശ്നങ്ങളൊന്നും ഉണ്ടാകില്ല.

തിരക്ക് ഇരട്ടിയാകും. ഒരേ ഡാറ്റ, അതേ ഫലം, എന്നാൽ "രണ്ട് തവണ" കൂടുതൽ ട്രാഫിക്. അതെ?

പൊടിയെ പറ്റി നിങ്ങൾ എന്താണ് പറയുന്നത്?!?

ഈ ഘടകം നിങ്ങൾക്ക് അപ്രധാനമാണെന്ന് തോന്നുന്നുവെങ്കിൽ, നിങ്ങൾ ഇവിടെ വായിക്കുന്നത് നിർത്തി UTF-X ഉപയോഗിക്കുന്നതിന് നിങ്ങളുടെ പ്രോജക്റ്റ് പുനർനിർമ്മിക്കാൻ തുടങ്ങണം,
ബാക്കിയുള്ളവയ്ക്കായി, സിംഗിൾ-ബൈറ്റ് എൻകോഡിംഗുകൾ ഉപയോഗിക്കുമ്പോൾ പ്രശ്നങ്ങൾ ഒഴിവാക്കാൻ സഹായിക്കുന്ന കുറച്ച് പാചകക്കുറിപ്പുകൾ ഞാൻ ഉപേക്ഷിക്കും. AJAX ആപ്ലിക്കേഷനുകൾ:

  • ആദ്യം, ഏറ്റവും പ്രധാനമായി, എല്ലായ്പ്പോഴും ഉള്ളടക്ക എൻകോഡിംഗ് വ്യക്തമാക്കുക. ടെക്സ്റ്റ് ഉള്ളടക്കമുള്ള ഏത് സെർവർ പ്രതികരണത്തിനും ഒരു തലക്കെട്ട് ഉണ്ടായിരിക്കണം ഉള്ളടക്ക-തരം: നിങ്ങളുടെ/തരം; അക്ഷരഗണം=നിങ്ങളുടെ അക്ഷരഗണം.
    ഇത് ചെയ്യാനുള്ള ഏറ്റവും വിലകുറഞ്ഞ മാർഗം ഒരു സെർവർ സജ്ജീകരിക്കുക എന്നതാണ് (ഉദാഹരണത്തിന് default_charset വഴി php-ൽ)
  • ഡോക്യുമെൻ്റ് ബോഡി()യിൽ ജാവാസ്ക്രിപ്റ്റ് ഉൾപ്പെടുത്തുമ്പോൾ അക്ഷരഗണം വ്യക്തമാക്കുക
  • ദയവായി ശരിയായ ചാർസെറ്റ് വ്യക്തമാക്കുക

    മുമ്പ് ഉചിതമായ തലക്കെട്ട് സജ്ജീകരിച്ച ശേഷം - “ഉള്ളടക്ക-തരം: വാചകം/html; അക്ഷരക്കൂട്ടം=cp1251”

    ഈ പ്രത്യേക സാഹചര്യത്തിൽ, കഴുത എടുത്തത്, fxposter അവൻ്റെ സ്വന്തം ദുഷ്ട പിനോച്ചിയോ ആണ്.

    ഏതെങ്കിലും രജിസ്റ്റർ ചെയ്ത IANA ചാർസെറ്റ് ഉപയോഗിക്കാം, എന്നാൽ UTF-8 ആണ് മുൻഗണന.

    ശരി, രജിസ്റ്റർ ചെയ്തിട്ടുള്ളവയിൽ cp1251 എന്ന പേരിൽ ഒരു എൻകോഡിംഗും ഇല്ല...

ചിത്രം പൂർത്തിയാക്കാൻ, നിങ്ങൾ അഭിമുഖീകരിക്കേണ്ടിവരുന്ന രണ്ട് പ്രശ്നകരമായ പ്രശ്നങ്ങൾ ഞാൻ നൽകും:

  • ലാറ്റിൻ ഇതര പ്രതീകങ്ങൾ അടങ്ങുന്ന AJAX പ്രതികരണങ്ങൾ ബ്രൗസർ കാഷെയിൽ നിലനിൽക്കാൻ അനുവദിക്കരുത് (304 പരിഷ്‌ക്കരിക്കാത്തത് കാഷെയിൽ നിന്ന് പ്രതികരണം ഉയരും, എന്നാൽ "ചില ബ്രൗസറുകൾ" utf-8 ആണ് ചാർസെറ്റായി ഉപയോഗിക്കുന്നത്)
  • json_code നായുള്ള വിവിധ ലൈബ്രറികളുടെ നിർമ്മാതാക്കൾ ഈ നിയമം നഗ്നമായി ഉപയോഗിക്കുന്നു, എന്നാൽ ബ്രൗസറുകൾക്ക് (ഞങ്ങൾ നേരത്തെ കണ്ടെത്തിയതുപോലെ), പ്രധാന കാര്യം എൻകോഡിംഗ് വ്യക്തമാക്കുക എന്നതാണ്, തുടർന്ന് എല്ലാം തകരും.
    അതിനാൽ "പ്രശ്നം" - നിങ്ങൾ JSON-ലേക്ക് സ്വമേധയാ ഡാറ്റ എൻകോഡ് ചെയ്യേണ്ടതുണ്ട്, ഇൻപുട്ടായി utf-8 പ്രതീക്ഷിക്കുന്നു

നിങ്ങളിൽ നിന്ന് ഈ കഥയുടെ ധാർമ്മികത ഞാൻ അഭിപ്രായങ്ങളിൽ പ്രതീക്ഷിക്കുന്നു.

AJAX, എൻകോഡിംഗ് പ്രശ്നങ്ങൾ