Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[PHP] includowanie plików UTF8

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[PHP] includowanie plików UTF8

Post 26.04.2007, 19:03:18

Witam !
Pliki zakodowane w UTF8 mają na samym początku 3 niewidoczne znaki. Podczas inkludowania takiego pliku te 3 znaki czasem są interpretowane przez przeglądarki jako nowa linia. W związku z tym zmodyfikowałem funkcję removeBOM_utf8() ze strony PHP.net:
Kod: Zaznacz cały
<?php
function include_removeBOM_utf8($plik){
   $fp = fopen($plik, "r");
   $s = fread($fp, 3);
   
  if(substr($s,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF'))){
       echo fread($fp, filesize($plik)-3); //$fp przesunął się sam o 3
   }else{
       include($plik);
   }
}
?>
Jeżeli na początku są te 3 znaki (zwane BOM-em) to wypisuje zawartość pliku za pomocą ECHO. W przeciwnym wypadku normalnie inkluduje.

Mój problem polega na tym, że używając ECHO - nie są wykonywane inne skrypty wewnątrz inkludowanego pliku, tak jak to się dzieje przy INCLUDE. Czy jest coś w rodzaju CALL z windowsowskiego comanda, dzięki czemu mógłbym zinkludować plik od 3 znaku ?

Pozdrawiam, Korpirkor
Format
Cezary Nowak

Posty: 106
Dołączył(a): 09.09.2003
Lokalizacja: Z Warszawy

Post 26.04.2007, 19:35:19

hmmm... eval?
Avatar użytkownikaKrzysiek Łabuś
Krzysiek Łabuś

retarded
retarded

Posty: 14361
Dołączył(a): 01.02.2004
Lokalizacja: Muszyna

Post 26.04.2007, 19:51:13

Dzięki :)
Jak kogoś interesuje - to jest finalna wersja funkcji:
Kod: Zaznacz cały
<?php
function include_removeBOM_utf8($plik)
{
   $fp = fopen($plik, "r");
   $s = fread($fp, 3);
   if(substr($s,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF')))
   {
      eval("?>" . fread($fp, filesize($plik)-3));
   }
   else
   {
      include($plik);
   }
   
   fclose($fp);
}
?>
Format
Cezary Nowak

Posty: 106
Dołączył(a): 09.09.2003
Lokalizacja: Z Warszawy

Post 26.04.2007, 23:34:03

Nie wiem czy jest sens usuwac za kazdym razem w locie.
Ja usuwam BOM tylko raz po edycji danego pliku *.php.

I jeszcze ciekawostka: PHP 6 bedzie poprawnie includowal pliki z BOM (przynajmniej tak zapewniali autorzy, nie testowalem Snapshots'ow)
Avatar użytkownikalunter
Posty: 795
Dołączył(a): 29.04.2004

Post 27.04.2007, 12:38:24

lunter napisał(a):Nie wiem czy jest sens usuwac za kazdym razem w locie.
Ja usuwam BOM tylko raz po edycji danego pliku *.php.

I jeszcze ciekawostka: PHP 6 bedzie poprawnie includowal pliki z BOM (przynajmniej tak zapewniali autorzy, nie testowalem Snapshots'ow)
Niestety PHP6 jeszcze nie istnieje, a w przyszłości nie tylko ja będe edytował te pliki.
Oczywiście mógłbym stworzyć cache, w którym usuwał bym BOM-a, ale to jest za dużo roboty.
Format
Cezary Nowak

Posty: 106
Dołączył(a): 09.09.2003
Lokalizacja: Z Warszawy

Post 27.04.2007, 12:40:21

Zawsze możesz używać edytora który nie zapisuje BOM'a dla plików w formacie UTF-8 (; np. [url=http:///www.pspad.com/en/]PSPad[/url] (:

Pozdrawiam (;
[workstation] Netbeans / Notepad++ / vim, Apache 2.x, php 5.3.x, MySQL 5.1.x/5.5.x
[employers] OpenOffice Polska, INFOR S.A., Gadu-Gadu S.A., Redefine
[github] my profile
stloyd
Józef Tomasz Bielawski

kamikazee
kamikazee

Posty: 5024
Dołączył(a): 16.07.2004
Lokalizacja: Łowicz / Warszawa

Post 27.04.2007, 13:12:53

no wlasnie, po bo uzywac funckji ktora usuwa BOM, skoro mozna uzywac edytora, ktory poprawnie zapisze plik.
http://inwestnet.com/promocja.php - hosting polecam!
http://e107.org.pl/news.php - probably the best cms in the world
potreb
Posty: 295
Dołączył(a): 18.11.2003
Lokalizacja: Przemyśl

Post 27.04.2007, 13:54:33

Panie i Panowie - temat BOM'a przewijal sie milion razy, skryptów/programów usuwających go z plików jest cała masa, w każdym z najpopularniejszych języków programowania

zamykam
Avatar użytkownikabendi
Marek Będkowski

junkie

Posty: 2867
Dołączył(a): 08.12.2003
Lokalizacja: Wrocław


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google Adsense [Bot] i 11 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 53170 zarejestrowanych użytkowników.
Najnowszy użytkownik: gendewetty


Nasi użytkownicy napisali:

  • 941579 wiadomości
  • w 251010 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)