SunshinePHP 2019

HTML'den Kaçmak

Başlangıç ve bitiş etiketlerinin dışında kalan her şey PHP çözümleyicisi tarafından gözardı edilerek PHP dosyalarının karışık içeriğe sahip olabilmesi sağlanır. Çoğu zaman, bu örnekte olduğu gibi PHP'nin HTML içine gömülmüş olduğunu göreceksiniz.

<p>Bu bölüm PHP tarafından gözardı edilecek ve tarayıcıda gösterilecektir.</p>
<?php echo 'Bu bölüm PHP tarafından çözümlenecektir.'?>
<p>Bu bölüm de PHP tarafından gözardı edilecek ve tarayıcıda gösterilecektir.</p>
Bu beklendiği gibi çalışır, çünkü PHP çözümleyicisi ?> kapanış etiketine rastlayınca (hemen ardından bir satırsonu karakteri gelmesi durumu hariç - bak: deyim ayırma) başka bir açılış etiketine rastlayıncaya kadar (etiketin koşullu bir ifadenin ortasında olması durumu hariç - bu durumda çözümleyici neyin atlanacağına karar vermek için ifadenin sonucun saptamaya çalışacaktır) herşeyi çıktılamaya başlar. Aşağıdaki örneğe bakınız:

Yapıların koşullu kullanımı

Örnek 1 - Koşul kullanan gelişmiş önceleme

<?php if (ifade == true): ?>
  İfade doğruysa bu gösterilir.
<?php else: ?>
  İfade doğru değilse bu gösterilir.
<?php endif; ?>
?>
Bu örnekte PHP, açılış/kapanış etiketlerinin dışında olsa bile koşulun karşılanmadığı blokları atlayacaktır, çünkü PHP yorumlayıcısı koşulun karşılanmadığı durumda koşulun içinde bulunan blokları atlar.

Büyük metin bloklarını görüntülemek istediğimizde PHP'yi çözümleme kipinden çıkartmak çoğu zaman tüm metni echo ya da print ile görüntülemekten daha verimlidir.

PHP 5'te, PHP'nin yapılandırılışına bağlı olarak kullanılabilecek beş farklı açılış ve kapanış etiketi çifti vardır. Bunlardan ikisi, <?php ?> ve <script language="php"> </script> her zaman kullanılabilir durumdadır. Ayrıca, bir de PHP 5.4.0 ve sonrasında kullanılabilen <?= ?> kısa echo etiketi vardır.

Diğer ikisi, kısa etiketler ve ASP tarzı etiketlerdir. Bazı kişiler kısa etiketleri ve ASP tarzı etiketleri daha kullanışlı bulmaktadır, ancak bu ikisi daha az taşınabilir olduklarından genellikle tavsiye edilmemektedir.

Bilginize:

Bir diğer önemli nokta, PHP'yi XML ya da XHTML içine gömmek istiyorsanız standartlarla uyumlu kalabilmek için <?php ?> etiketlerini kullanmanız gerektiğidir.

PHP 7'de ASP ve <script language="php"> etiketleri için destek kaldırılmıştır. Sonuç olarak, PHP kodunu yazarken azami uyumluluk için sadece <?php ?> ve <?= ?> etiketlerini kullanmanızı öneriyoruz.

Örnek 2 - PHP Açılış ve Kapanış Etiketleri

1.  <?php echo 'XHTML ya da XML belgeleri sunacaksanız, 
                bu etiketleri kullanın'
?>

2.  <?= 'bu metni basmak' ?> için kısa echo etiketini kullanabilirsiniz.
    PHP 5.4.0 ve sonrasında daima etkin olup
    <?php echo 'bu metni basmak' ?> ile eşdeğerdir.

3.  <? echo 'bu kod kısa etiketlerin içindedir, fakat sadece '.
            
'short_open_tag etkinse çalışır'?>

4.  <script language="php">
        
echo 'bazı düzenleyiciler (FrontPage gibi) bu etiketlerin 
             içindeki işlem yönergelerini sevmezler'
;
    
</script>

5.  <% echo 'İsterseniz ASP tarzı etiketler kullanabilirsiniz'; %>
    <%= $değişken; %> etiketleri içindeki kod, <% echo $değişken; %> 
     için bir kısayoldur. Bu son iki etiket çifti PHP 7.0.0'da kaldırılmıştır.

Kısa etiketler (üçüncü örnek) yalnızca php.ini içersinde short_open_tag yapılandırma yönergesiyle etkinleştirilmişlerse ya da PHP, --enable-short-tags derleme seçeneği ile yapılandırılmışsa kullanılabilirler.

ASP tarzı etiketler (beşinci örnek) php.ini dosyasında asp_tags yapılandırma yönergesiyle etkinleştirilmişse kullanılabilir. Bunlar PHP 7.0.0'da kaldırılmıştır.

Bilginize:

Geliştirdiğiniz uygulamaları ya da kütüphaneleri başkalarına dağıtacaksanız ya da bu uygulamaları denetiminizde olmayan PHP sunucularına kuracaksanız kısa etiketleri kullanmaktan kaçınmalısınız, çünkü hedef sunucu kısa etiketleri desteklemiyor olabilir. Kodlarınızın taşınabilir ve yeniden dağıtılabilir olması için, alışkanlıkla kısa etiketleri kullanmadığınızdan emin olun.

Bilginize:

PHP 5.2 ve öncesinde, çözümleyici, bir dosya içindeki tek şey olarak <?php başlangıç etiketine izin vermezdi. Açılş etiketinden sonra bir veya daha fazla boşluk karakteri olması durumunda PHP 5.3'ten itibaren izin verilmektedir.

Bilginize:

PHP 5.4 itibariyle, kısa echo etiketi <?= short_open_tag seçeneğine bakılmaksızın daima geçerlidir ve tanınmaktadır.

add a note add a note

User Contributed Notes 9 notes

up
331
quickfur at quickfur dot ath dot cx
8 years ago
When the documentation says that the PHP parser ignores everything outside the <?php ... ?> tags, it means literally EVERYTHING. Including things you normally wouldn't consider "valid", such as the following:

<html><body>
<p<?php if ($highlight): ?> class="highlight"<?php endif;?>>This is a paragraph.</p>
</body></html>

Notice how the PHP code is embedded in the middle of an HTML opening tag. The PHP parser doesn't care that it's in the middle of an opening tag, and doesn't require that it be closed. It also doesn't care that after the closing ?> tag is the end of the HTML opening tag. So, if $highlight is true, then the output will be:

<html><body>
<p class="highlight">This is a paragraph.</p>
</body></html>

Otherwise, it will be:

<html><body>
<p>This is a paragraph.</p>
</body></html>

Using this method, you can have HTML tags with optional attributes, depending on some PHP condition. Extremely flexible and useful!
up
95
ravenswd at gmail dot com
9 years ago
One aspect of PHP that you need to be careful of, is that ?> will drop you out of PHP code and into HTML even if it appears inside a // comment. (This does not apply to /* */ comments.) This can lead to unexpected results. For example, take this line:

<?php
  $file_contents 
= '<?php die(); ?>' . "\n";
?>

If you try to remove it by turning it into a comment, you get this:

<?php
//  $file_contents  = '<?php die(); ?>' . "\n";
?>

Which results in ' . "\n"; (and whatever is in the lines following it) to be output to your HTML page.

The cure is to either comment it out using /* */ tags, or re-write the line as:

<?php
  $file_contents 
= '<' . '?php die(); ?' . '>' . "\n";
?>
up
33
snor_007 at hotmail dot com
8 years ago
Playing around with different open and close tags I discovered you can actually mix different style open/close tags

some examples

<%
//your php code here
?>

or

<script language="php">
//php code here
%>
up
30
sgurukrupa at gmail dot com
4 years ago
Although not specifically pointed out in the main text, escaping from HTML also applies to other control statements:

<?php for ($i = 0; $i < 5; ++$i): ?>
Hello, there!
<?php endfor; ?>

When the above code snippet is executed we get the following output:

Hello, there!
Hello, there!
Hello, there!
Hello, there!
up
0
Emil Cataranciuc
7 months ago
"<script language="php"> </script>, are always available." since PHP 7.0.0 is no longer true. These are removed along the ASP "<%, %>, <%=" tags.
up
4
mike at clove dot com
8 years ago
It's possible to write code to create php escapes which can be processed later by substituting \x3f for '?' - as in echo "<\x3fphp echo 'foo'; \x3f>";

This is useful for creating a template parser which later is rendered by PHP.
up
-22
admin at furutsuzeru dot net
9 years ago
These methods are just messy. Short-opening tags and ASP-styled tags are not always enabled on servers. The <script language="php"></script> alternative is just out there. You should just use the traditional tag opening:

<?php?>

Coding islands, for example:

<?php
$me
'Pyornide';
?>
<?=$me
;?> is happy.
<?php
$me
= strtoupper($me);
?>
<?=$me
;?> is happier.

Lead to something along the lines of messy code. Writing your application like this can just prove to be more of an
inconvenience when it comes to maintenance.

If you have to deal chunks of HTML, then consider having a templating system do the job for you. It is a poor idea to rely on the coding islands method as a template system in any way, and for reasons listed above.
up
-15
2290071451 at qq dot com
1 year ago
<script language='php'></script>这种写方在php7.0后已经不解析了。
up
-61
nath dot realmadrid at gmail dot com
3 years ago
"  There are four different pairs of opening and closing tags which can be used in PHP. Two of those, <?php ?> and <script language="php"> </script>, are always available  " - It is not true with PHP7. script and ASP style tags are removed from PHP7.
To Top