Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Includowanie plików w kodowaniu UTF-8
Forum PHP.pl > Forum > PHP
Athlan
Może głupi temat, po przeczytaniu go większość się uśmieje (tak jak ja tongue.gif ) ale nie ma do tego powodu, bo po głębszym zastanowieniu pewnie na 90% twarzach zniknie śmiech smile.gif

Problem jest pierwszego rzędu tongue.gif Ostatnio w moich aplikacjach często pojawia się w kodzie tajemnicza kropka. Zbadałem to, pojawia się przy includowaniu plików kodowanych w UTF8.

Aż prosi się o przykład:

index.php:

Kod
start index
<?php include './plik1.php'; ?>
stop index


plik1.php

Kod
start 1
<?php include './plik2.php'; ?>
stop1


plik2.php

Kod
start 2
stop 2


Oto wygenerowane źródło:

Kod
start index
?start 1
?start 2
stop 2
stop1
stop index


co robią te znaki przed start1 i start2 ? What the fuck? blink.gif Różnie są przdstawiane, na Operze to kropka w pozycji podobnej do znaku ` . Na firefox wogóle nie widać go w źródle, ale jednak Validator się czepia. Znak pojawia się bezpośrednioprzed wykonywaniem funckji include()/require().

Livedemo: http://mdes.pl/~athlan/unknown_char/ (najlepiej obadać z Opery, ja korzystam z 9.02)
Paczka: http://mdes.pl/~athlan/unknown_char/unknown_char.rar

O co chodzi? smile.gif

Pozdrawiam, Athlan smile.gif
Bastion
Przyglądając się hexowi plikom które wystawiłeś, można wywnioskować że twój edytor
dodaje jakiś syf na początku pliku

http://www.jarzebski.pl/trash/img0001.png

Otworzyłem Twój plik w swoim edytorze i znak został pominięty, jednak kiedy go naspisałem
również w utf-8 znaku na początku pliku już nie było.
Denver
Walidacja dokumentu w W3.org wypluwa błąd:

Cytat
Byte-Order Mark found in UTF-8 File.

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.


Oznacza to, że bodajże pierwsze 3 bajty w pliku zakodowanym w UTF-8 zawierają informację o tym, że jest to właśnie UTF-8 smile.gif. W przypadku stron internetowych powinno się unikać tych znaków.

Jeśli pracujesz na Windowsie, to pobierz np. Notepada++, w którego menu istnieje możliwość zmiany kodowania pliku z UTF-8 na ANSI (UTF-8 without BOM).
Athlan
Denver: właśnie tak zrobiłem i działa, wina edytora. Znalazałem kilka wzmianek na ten temat w manualu:

http://pl2.php.net/manual/pl/function.include.php#65837
http://pl2.php.net/manual/pl/function.include.php#64895

EOT
cadavre
Dokładnie tak - edytor. Najczęściej błąd pojawia się przy próbie szybkiej edycji pliku przy jakimś malutkim błędzie - by uniknąć odpalania jakiegoś dużego IDE po prostu sięga się po np. Notatnika Windows. On - owszem - obsługuje UTF-8; jednak dodaje tenże syf na początku każdego pliku. Dlatego też lepiej korzystać z innego edytora do szybkiej edycji. Ja w tym celu używam w/w Notepad++.
Athlan
Validator dodaje notatkę
Cytat
Byte-Order Mark found in UTF-8 File.

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.


smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.