PHP Dosya Kodlama Problem Açılış?

2 Cevap php

PHP bir oyun tarafından oluşturulan bir. Günlük dosyasını açmaya çalıştığınızda bu bir demet olsun.

ÿþ*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*� �
K�2� �E�n�g�i�n�e� �s�t�a�r�t� �u�p�.�.�.� �
[�2�0�0�9�/�2�2�/�0�9�]� �
[�1�6�:�0�7�:�3�3�]� �
[�0�.�1�.�4�6�.�0�]� �
[�0�]� �

Ben neden olarak hiçbir fikrim yok? Benim kod

$file = trim($_GET['id']);
$handle = @fopen($file, "a+");

	if ($handle) {
		print "<table>";
    	while (!feof($handle)) {
        	$buffer = stream_get_line($handle, 10000, "\n");
        	echo "<tr><td width=10>" . __LINE__ . "</td><td>" . $buffer . "</td></tr>";
        }
        print "</table>";

fclose($handle);

Görünüşe göre büyük dosyalar için daha iyidir çünkü stream_get_line kullanıyorum?

2 Cevap

PHP gerçekten kodlamalar hakkında çok şey bilmiyor. Özellikle, bu dosyanın kodlaması hakkında hiçbir şey bilmiyor.

Veri UTF-16LE gibi görünüyor. Sadece baskı yapıyorsanız bu yana, siz de çıktı UTF-16LE olarak HTML tüm komut dosyasını dönüştürebilir, ya da - yani size işleyebilir bir şey haline dönüştürmek olduğunu gerekir.

Ben muhtemelen UTF-8 dönüştürme ve sayfa kodlama olarak, bu yüzden hiçbir karakter kaybolur emin olduğunuz kullanmayı tercih ediyorum. O kullanılabilir varsayarak, iconv bir göz atın (bir PHP uzantısı Windows gerekli, ben inanıyorum).

Ne olursa olsun ne, sen kodlama her zaman aynı olduğunu varsayarak, ilk satırın ilk iki karakter şerit gerektiğini unutmayın. Eğer gösteren konum verileri, bu karakterler (daha önce de belirttiğim gibi, UTF-16LE) bize dosyanın kodlamasını söyler bayt sırası işareti vardır.

Ancak, düz metin olarak görünüyor ne gibi görerek, ve yaptığın bütün verileri yazdırırken, sadece (bu Unicode destekleyen) bir düz eski metin editörü açarak düşünün. Işletim sistemini bilmeden, ben belirli bir önermek için tereddüt ediyorum, ama Windows üzerinde konum ve dosya nispeten küçük ise, Not Defteri yapabilirsiniz.

Bir yan not olarak, __LINE__ size okuyorsanız dosyanın satır sayısını vermeyecektir, o anda yürütülen komut satırının satır numarasını yazdırmak olacaktır.

You might be running into a UTF-8 Byte Order Mark: http://en.wikipedia.org/wiki/Byte-order%5Fmark Try reading it like so:

<?php
// Reads past the UTF-8 bom if it is there.
function fopen_utf8 ($filename, $mode) {
    $file = @fopen($filename, $mode);
    $bom = fread($file, 3);
    if ($bom != b"\xEF\xBB\xBF")
        rewind($file, 0);
    else
        echo "bom found!\n";
    return $file;
}
?>

Gönderen: http://us3.php.net/manual/en/function.fopen.php#78308