Nasıl satır içi önlerim

8 Cevap php

PHP, ben böyle bir şey yapmak her zaman:

<span>Blah blah HTML</span>
<?= echo $this->foo ?>
<br />

Kaynağında bu gibi görüntüler:

<span>Blah blah HTML</span>
{$this->foo whatever it is}     <br />

Yerine

<span>Blah blah HTML</span>
{$this->foo whatever it is}
<br />

Bu gibi şeyler zaman bütün olur. Inline PHP benim yeni hatlar tüm sakat yapar ve bu beni rahatsız ediyor. HTML içinde PHP tam bir blok başlar ama HTML sekmeler ile tutarlı tutmak zaman da olur. Örneğin:

<div id="foo">
    <div class="bar">
    <?
        foreach(whatever)
        {
    ?>
    </div>
</div>

Pisliği kaynağının biçimlendirme ve böyle bir şey yapmak zorunda olacak:

<div id="foo">
    <div class="bar">
<?
foreach(whatever)
{
?>
    </div>
</div>

8 Cevap

Eğer HTML çıktısı güzel olmak istiyorum ve kundakçı gibi tarayıcı araçları güvenmek istemiyorsanız, PHP hile yapacak Tidy adında bir sınıfı vardır.

ps, kısa etiketler (<?= ?>) itiraz edilmiştir. Sen geçmek isteyebilirsiniz (<?php ?>)

Eğer html biçimlendirme endişe ediyorsanız. Sonra bir yeni satır eklemek gerekir.

<span>Blah blah HTML</span>
<?= echo $this->foo."\n" ?>
<br />

Ama bu aşağı gitmek için tehlikeli bir yol olduğunu, dikkatli olun. Endişelenecek edeceğiz sonraki şey sekme girinti Çünkü. Eğer öyleyse o zaman her yerde \t bir demet ekleyeceğiz. Ve sonra kod çıktı temiz ve düzgün bir html olacak ama kaynak kod olarak okunamaz yakın olacak ise.

Yani benim önerim. Çok konuda endişe etmeyin.

İlk soru için, sadece satır karakteri \ n kullanabilirsiniz

Ben ikinci öğe hakkında o kadar emin değilim. Eğer Çıktılanan html endişe neden sorabilir miyim? Çıktı ne olduğunu görmek için bunu kullanıyor çünkü eğer, ben Firebug'ın takdim edebilir? Kundakçı sizin için DOM ağacı güzel ve temiz görüntüler (ve hatta DOM enjeksiyonları ile güncel tutar) olacaktır.

Sadece bil ki, <?= aslında demek <?php echo. Yani sadece yapmak zorunda <?=$username?>

Bir ile oluşturulan HTML kodunu görüntülemek tool, örneğin Firebug, yapar formatting automatically.

Firebug kurduktan sonra, sadece F12 tuşuna basın ve HTML sekmesini seçin. Oldukça biçimlendirme yazdıran bir ağaç denetimi kullanarak HTML kaynağını gezinebilirsiniz.

Firefox dışında bir tarayıcı gelişmekte eğer Firebug Lite kullanabilirsiniz. Sadece sitenize Firebug Lite web sayfasında HTML pasajını enjekte.

Gereksiz boşluk ortadan sitenizin performansını artırabilir unutmayın, bu yüzden HTML mutlaka kötü bir şey değil "minified" sahip.

Ne yazık ki, doğrudan bu konuda yapabileceği bir şey yok. Bize de girintili bulunuyor kaynak kodunu görüntülemek için insanlarda için güzel olsa da, HTML spec her zaman önemsiz gibi beyaz boşluk olarak kabul etmiş ve bu nedenle HTML ile başa çıkmak için sistemler geliştirmek insanlar genellikle ince taneli kontrolü için özellikler ekleyerek düşünmüyoruz. Ayrıca, PHP açıklanan davranışı tarafından daha esnek yapılır. Beyaz boşluk önemli OLDU çıktıyı üretmek için kullanılan ediliyordu Örneğin, sizin tarif davranış arzu olacaktır.

Iyi girintili HTML kaynak kodu sizin için önemli olduğuna karar verdi ise, biçimlendirme işlemek için çıkış etrafında yerde bir sistem koymak gerekiyordu. Aksine çıkışı daha doğrudan bir şey çıktı kesmek ve sizin için otomatik olarak biçimlendirme ele olur. Çıkış tamponlama biri bunu elde edebiliriz idi.

ob_start();
//...
//a bunch of code that echos or prints HTML
//...
$output = ob_get_clean();
echo some_function_or_method_call_to_format_your_html_however_you_want($output);

PHP Tidy fonksiyonları başlamak için iyi bir yer olabilir ancak, okuyucu için bir alıştırma olarak bırakılırsa some_function_or_method_call_to_format_your_html_however_you_want uygulanması.

Bağlamıyla, çıktı eklemek için kaç sekme veya satır tespit olabilir, bu bir nesne üzerinden tüm çıktıyı yönlendirme örneğin siz de sürebilir diğer yaklaşımlar vardır. Ana nokta kendisi tarafından, bu sorunu çözmeye yardımcı olacak değil, ama does kendi çözümünüzü oluşturmak için araçları sağlamak, PHP.

PHP motoru (php içerden çıkışı hariç) hiçbir şey ile PHP kodu ile alanları değiştirir böylece yaptığınızda:

<h1>Foo Bar</h1>
<?= $value; ?>
<p>my stuff</p>

php sonra yeni satır kaldırır?>. Yeni hat "korunmuş" o istiyorsanız sadece kapanış girdikten sonra 2 defa basabilirsiniz?>. Eğer bir insan "okunabilir" HTML çıktı üretmek gerekiyorsa Gerçekten de, sen temizler / sanitizes / biçimleri HTML kodunu (Tidy yukarıda belirtildiği, bu nedenle bu kullanabilirsiniz) bazı kütüphane kullanımı gerekir.

Biçimlendirme PHP ile sorunları ve korunması sekmeler gelince, ben sadece verdiği açıklama, onu kapsar - ama (düzenleme için) daha okunabilir kaynak kodu yapmak istiyorsanız gerçekten terfi değil şablonları için PHP alternatif sözdizimi (kullanmayı düşünmelisiniz Yaklaşık bunun yanı sıra) olması gerekir. (Başka için, süre, foreach, eğer) en tüm php kontrol yapıları html şablonları çok güzel görünüyorsun alternatif sözdizimi seçenekleri var.

<? foreach ($foo as $bar): ?>
    <li>
    	<?= $bar['baz']; ?>
    </li>
<? endforeach; ?>

<? if (false == empty($foo)): ?>
    <p>
    	Hello World!
    </p>
<? endif; ?>

<? for ($i = 0, $icount = count($foo); $i < $icount; $i++): $val = $foo[ $i ]; ?>

    <tr>
    	<td><?= $val; ?></td>
    </tr>

<? endfor; ?>

Ayrıca, birisi yukarıda PHP kısa etiketler kalktı bahsettiniz. Tekmeleme, hala hayatta ve sadece harika - Yani, http://us.php.net/manual/en/ini.core.php#ini.short-open-tag sadece düpedüz iftiradır.

Kısa etiketler <?php ?>, her yerde söz değil, o <?= ?> mümkün kılan olan daha yukarıdaki kodu daha okunabilir hale getirmek. <?= <?php echo veya <? echo için kısa eldir - Kullanıcı kodu oldukça daha okunabilir hale. Olsa da, açık kaynak kodlu olması gerekiyordu ve farklı webserver'lerin bir kuş sürüsü üzerinde kullanılan kod yazıyorsanız eğer, en azından olmak (ya da aracılığıyla açmak için kısa etiketleri gerektiren indirenler uyarmak gerektiği belirtilmelidir ini_set() ya da php_flag [in .htaccess])

Pisliği kaynağının biçimlendirme ve böyle bir şey yapmak zorunda olacak:

<div id="foo">
    <div class="bar">
<?
foreach(whatever)
{
?>
    </div>
</div>

Bu kolayca korumak böylece orijinal PHP kaynak kodu, okunabilir olduğunu important bulunuyor. Bu not at all important yapmak hepsi insanların% 0.0001 için oldukça indenting kim 'görünümü kaynak olacak'. Yukarıdaki pasajı sadece sizin için sert şeyler yapar.

[HTML] kaynağında bu gibi görüntüler:

<span>Blah blah HTML</span>
{$this->foo whatever it is}     <br />

Eğer beklediğiniz nerede benim için, satır görünür değildir. Ama öyle bile olsa, kimin umurunda? Sürece biçimlendirme kendisi geçerli ve kompakt olduğu gibi, sen iyisin.

Iyi iç içe başlangıç ​​ve bitiş etiketleri tarzında PHP kullanarak JimR en örneğe bakın. Oldukça her zaman girinti iç içe düzeyleri arasında geçiş yerine, kod ve biçimlendirme tek bir tutarlı hiyerarşisi tutar olarak bu sürdürülebilirlik için iyi bir yaklaşımdır.

Benim için, bu da tutarlı bir girinti ağacı ile HTML kaynak verme yan etkiye sahiptir. Daha boş satırların ve kesinlikle gerekli olandan daha büyük girintili biri, ama yine, kimin umurunda? Dosyayı daha büyük yaparak ekstra boşluk bir sorun değildir; on-the-fly mod_deflate seviyor sıkıştırma hiçbir şey uzakta zip olacaktır.

JimR tarafından kullanılan 'alternatif sözdizimi' Bu tekniği kullanmak için gerekli olduğunu unutmayın, çok parantez ile mükemmel çalışır ve seçtiğiniz kişisel zevk meselesi:

<?php
    $replyn= count($replies);
?>
<?php if ($replyn)==0) {?>
    <p> (no replies.) </p>
<?php } else { ?>
    <h3> Replies </h3>
    <?php for ($i= 0; $i<$replyn; $i++) { ?>
        <p>
            <?php echo(htmlspecialchars($replies[$i], ENT_QUOTES)); ?>
        </p>
    <?php } ?>
<?php } ?>

(Şahsen rağmen I echo(htmlspecialchars)) her zaman dışarı yazarak önlemek için bir kısayol işlevini kullanın. Eğer htmlspecialchars kullanarak değilseniz, muhtemelen güvenlik sorunları var.)

Bu örnek, kısa etiketler izin olmadığını akacak kadar tam <?php etiketler kullanır. Ben, zaman kaybı biraz durmak gibi tam etiketleri, olduğu JimR katılıyorum Sonuçta olsa.

(Bu XML'in İşleme Talimatları ile PHP daha uyumlu hale getirmek için iyi bir fikir olduğunu, ama onlar nitelik değerlerinin içine PHP etiketlerini şablon için bir yol ile takip asla beri, o da iyi biçimlendirilmiş XML olan bir PHP sayfası yazar gerçekten hala mümkün değil biraz anlamsız egzersiz yapma.)