A bájtsorrend- jelző vagy bájtsorrend- jel ( angol Byte Order Mark, BOM ) egy speciális karakter a Unicode -szabványból , amelyet szöveges fájl vagy adatfolyam elejére szúrnak be, jelezve, hogy a fájlban (folyamban) Unicode-ot használnak, valamint közvetve jelzi a kódolást és a bájtsorrendet , amellyel a Unicode karaktereket kódolták. A karakter Unicode-száma U+FEFF. Ennek a karakternek a használata a Unicode specifikáció szerint opcionális, de széles körben használatos, mivel könnyen elkerülhető a szöveges információk helytelen dekódolása.
A Unicode specifikáció szerint egy jelölő csak a fájl vagy adatfolyam legelején jelenhet meg. Ha egy karakter U+FEFFaz adatfolyam közepén fordul elő, akkor muszáj "nulla szélességű, nem törő szóközként" (lényegében nem megjeleníthető és semmit sem változtató karakterként) értelmezhető. A legtöbb azonban[ mennyit? ] az Opera 12-es és régebbi verzióitól eltérő böngészők a dokumentum közepén lévő BOM-ot egy teljes sort elfoglaló karakterként kezelik, majd sortörést generálnak [1] .
A Unicode-ban a megszakítást nem igénylő nulla szélességű szóközhöz külön speciális karakter is tartozik - U+2060, amelynek használata javasolt, a bájt szekvencia jelölőt pedig U+FEFFcsak a rendeltetésének megfelelően.
Ha a Unicode karakterábrázolási formátumot a fogadó program pontosan előre ismeri, akkor a Unicode szabvány szerint a markert nem szabad beállítani. És ha a formátum más módon van deklarálva (például MIME a fejléc mezőben Content-Type), akkor a jelölőt nem kell a szabvány szerint beállítani.
A fájl vagy adatfolyam elején található bájtsorozat-jelölő kódolásával könnyen meghatározható a Unicode karakterek kódolásához használt kódolás és bájtsorrend az adott fájlban vagy adatfolyamban. Ez a körülmény volt a fő oka a bájtszekvencia marker széles körű elterjedésének.
Kódolás | Byte Sequence Marker ábrázolása | A marker ábrázolása hibás dekódolás esetén eltérő kódolással | |||||
---|---|---|---|---|---|---|---|
Hex kód | Tizedes kód | ISO-8859-1 | KOI8-R | CP1251 | CP866 | megjegyzés | |
UTF-8 [t1] | EF BB BF | 239 187 191 |  | О╩© | п»ї | я╗┐ | |
UTF-16 ( BE ) | FE FF | 254 255 | þÿ | ЧЪ | юя | ■ | rés – nem szakadó |
UTF-16 ( LE ) | FF FE | 255 254 | ÿþ | ЪЧ | яю | ■ | |
UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ | ␀␀ЧЪ | ␀␀юя | ␀␀■ | ␀ - NUL , szóköz - törésmentes |
UTF-32 (LE) | FF FE 00 00 | 255 254 0 0 | ÿþ␀␀ | ЪЧ␀␀ | яю␀␀ | ■␀␀ | |
UTF-7 [t1] | 2B 2F 76 38 2B 2F 76 39 2B 2F 76 2B 2B 2F 76 2F[t2] |
43 47 118 56 43 47 118 57 43 47 118 43 43 47 118 47 |
+/v8 +/v9 +/v+ +/v/ | ||||
UTF-1 [t1] | F7 64 4C | 247 100 76 | ÷dL | ||||
UTF-EBCDIC [t 1] | DD 73 66 73 | 221 115 102 115 | Ýsfs | ||||
SCSU [t1] | 0E FE FF[t3] | 14 254 255 | ␎þÿ | ␎■ | ␎ - pl. Shift Out szimbólum, a hely töretlen | ||
BOCU-1 [t1] | FB EE 28 | 251 238 40 | ûî | √ю( | |||
GB-18030 [t1] | 84 31 95 33 | 132 49 149 51 | �1�3 | Д1Х3 | � — értékek nélküli kódok |
Vannak esetek, amikor a bájtszekvencia marker használatát annak kényelme ellenére kerülni kell. Ha például jelölőt használ a websablonokban , akkor üres sorok jelennek meg a dokumentumban, ezért célszerű eltávolítani a jelölőt a webes szkriptekből és CSS - fájlokból. És ha a PHP fájlok elején (a címke előtt <?php) van egy marker, akkor a program egy üres karakterláncot küld a kliensnek, még mielőtt a kód végrehajtása megkezdődött volna, ami meghibásodást okoz olyan esetekben, amikor a HTTP fejlécet azonnal el kell küldeni az ügyfél (például egy kérés átirányításakor). [5] Az is előfordulhat, hogy helytelenül dolgozza fel a json_decode értéket , ha a json egy BOM-mal rendelkező fájlba van írva.