PHP dosyaları UTF-8 BOM imza

6 Cevap php

Bazı yorumladı PHP sınıfları yazıyordu ve ben bir sorun tökezledi. (@ Yazar etiketi için) benim adım (UTF-8 karakter, ... ve tuhaf bir isim, biliyorum ki) bir ș ile biter.

Ben UTF-8 olarak dosyayı olsa, bazı arkadaşlar onlar karakter tamamen (È™) berbat olduğunu görüyoruz bildirdi. Bu sorun BOM imza ekleyerek uzağa gider. Ben bu konuda o kadar bilmiyorum çünkü ama o şey ben SO Wikipedia'da ve burada bazı diğer benzer sorular gördüm ne dışında, bana biraz sıkıyor.

Ben o dosyanın başında bazı şeyler ekler biliyorum, ve ben o kadar da kötü değil, ama sadece sorunlu senaryoları ben dahil PHP dosyaları hakkında okuyun çünkü ben endişeliyim anladım ne. Ben bunları paylaşmak için PHP sınıfları yazıyorum bu yana,% 100 uyumlu olan yorumların ismimi olan daha önemlidir.

Ama etkileri, ben önemsemeden kullanmak gerektiğini anlamaya çalışıyorum? Hasara neden olabilir zaman veya durumlar vardır? Ne zaman?

6 Cevap

Nitekim, BOM tarayıcınıza gönderilen gerçek verilerdir. Tarayıcı mutlulukla bunu görmezden, ama yine de daha sonra başlıkları gönderemezsiniz.

Ben sorun gerçekten sizin ve arkadaşınızın editörü ayarları olduğuna inanıyorum. BOM olmadan, arkadaşınızın editörü otomatik olarak UTF-8 olarak dosyayı tanımayabilir. Onun editörü kurmak için deneyebilirsiniz böyle NetBeans gibi gerçek bir IDE kullanıyorsanız editörü UTF-8 olmak expects bir dosya, (o zaman bu bile yapabilirsiniz bir proje ayarı yapılabilir böyle ) kodu ile birlikte transfer.

Alternatif bazı hileler denemek için: Bazı editörler girilen metne dayalı bazı Sezgisel yöntem kullanarak kodlamasını belirlemek için deneyin. Sen her dosya başlatmak için deneyebilirsiniz

<?php //Úτƒ-8 encoded

ve belki de sezgisel onu alırsınız. Orada koymak için daha iyi şeyler muhtemelen, ve ortak kodlaması algılama sezgisel ne tür için google, ya da sadece :-) bazılarını deneyebilirsiniz ya

Sonuçta, ben sadece editör ayarları sabitleme öneririz.

Oh son bölümünü oynanırsa, bekleyin: her yerde kodu yaymak için, sana güvenli sanırım sadece tüm dosyaları yalnızca, yani düz ASCII, düşük 7-bit karakter içeren, ya da sadece eski editörleri ile bazı insanlar görmek olduğunu kabul etmek yapma Adınızı komik yazılı. Fail-safe yolu yoktur. BOM, çünkü zaten bir şey gönderilen başlıkların kesinlikle kötü. Diğer taraftan, sürece yalnızca yorumlarda UTF-8 karakterlerini koymak ve böylece, kodlamayı yanlış anlama, bazı düzenleyici etki sadece garip karakterdir. Ben doğru adını yazım ve en editörler onu alırsınız böylece sezgisel tarama hedefleyen Yorum eklemek için gitmek istiyorum, ama her zaman bunun yerine sahte karakter göreceksiniz insanlar olacak.

BOM Headers already sent hatası neden olur, bu nedenle, PHP dosyalarında Reçetesi kullanamazsınız

Bu eski bir yazı olduğunu ve zaten cevap olmuştur, ama ben sana ben bu BOM sorunu ile karşı karşıya buldum bazıları kaynaklar bırakabilirsiniz.

Belirli bir dosya Reçetesi içeriyorsa http://people.w3.org/rishida/utils/bomtester/index.php Bu sayfa ile kontrol edebilirsiniz.

Geçerli dizindeki BOM ile tüm dosyaları çıkışları kullanışlı bir yazılımı da vardır.

<?php 
function fopen_utf8 ($filename) { 
    $file = @fopen($filename, "r"); 
    $bom = fread($file, 3); 
    if ($bom != b"\xEF\xBB\xBF") 
    { 
        return false; 
    } 
    else 
    { 
        return true; 
    } 
} 

function file_array($path, $exclude = ".|..|design", $recursive = true) { 
    $path = rtrim($path, "/") . "/"; 
    $folder_handle = opendir($path); 
    $exclude_array = explode("|", $exclude); 
    $result = array(); 
    while(false !== ($filename = readdir($folder_handle))) { 
        if(!in_array(strtolower($filename), $exclude_array)) { 
            if(is_dir($path . $filename . "/")) { 
                                // Need to include full "path" or it's an infinite loop 
                if($recursive) $result[] = file_array($path . $filename . "/", $exclude, true); 
            } else { 
                if ( fopen_utf8($path . $filename) ) 
                { 
                    //$result[] = $filename; 
                    echo ($path . $filename . "<br>"); 
                } 
            } 
        } 
    } 
    return $result; 
} 

$files = file_array("."); 
?>

Ben php.net de bu kodu bulundu

Dreamweaver ayrıca bu yardımcı olur, size dosyayı kaydedin ve BOM şeyler katmak değil seçeneği sunar

Its a late answer, but i still hope it helps. Bye

Sadece bil ki, php Headers already sent hata vermeden BOM ile dosyaları okumak için izin verir php, zend.multibyte bir seçenek var.

Php.ini dosyasında:

; If enabled, scripts may be written in encodings that are incompatible with
; the scanner.  CP936, Big5, CP949 and Shift_JIS are the examples of such
; encodings.  To use this feature, mbstring extension must be enabled.
; Default: Off
;zend.multibyte = Off

PHP, hata "zaten gönderildi başlıklarına" ek olarak, bir BOM varlığı da daha ince yöntemlerle tarayıcıda HTML berbat edebilirsiniz.

Sorunun bir taslak için bu link bakın.

Bu durumda, oluşturulan sayfanın üst kısmında gözle görülür bir boşluk genellikle orada değil sadece, ama Firefox veya Chrome'da HTML incelemek varsa, baş bölümü boştur ve elementler vücutta olması göründüğünü fark edebilirsiniz. Tabii inceleyen kaynağı olması gereken her şeyi gösterecektir, ama nedense tarayıcı yanlış yorumluyor.

Ya da "zaten gönderildi başlıklar" sorunu çözecek olan php.ini çıktı tamponlama aktive olabilir. Bu site önemli bir yük varsa performans için çıkış tamponlama kullanmak da çok önemlidir.