PHP 7.1.12 Released

HTML'den Kaçmak

PHP bir dosyayı çözümlerken, hangi bölümü yorumlayıp hangi bölümü yorumlamadan geçeceğine açılış ve kapanış etiketlerine bakarak karar verir. PHP'nin bu şekilde çalışıyor olması, PHP'nin çesitli türde birçok belgenin içine gömülebilmesini sağlar, çünkü PHP başlangıç ve bitiş etiketlerinin dışında kalan her şey PHP çözümleyicisi tarafından gözardı edilir. Ç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 gözardı edilecektir.</p>
<?php echo 'Bu bölüm PHP tarafından çözümlenecektir.'?>
<p>Bu bölüm de gözardı edilecektir.</p>

Daha gelişmiş yapılar da kullanmanız mümkündür:

Örnek 1 - Gelişmiş önceleme

<?php
if ($ifade) {
    
?>
    <strong>Bu önerme doğrudur.</strong>
    <?php
} else {
    
?>
    <strong>Bu önerme yanlıştır.</strong>
    <?php
}
?>
Bu beklendiği gibi çalışacaktır, çünkü PHP, ?> kapanış etiketi ile karşılaştığında, tekrar bir açılış etiketi ile karşılaşana kadar bulduğu herşeyi (kapanış etiketinden sonraki satırsonu karakteri hariç - bkz, deyim ayırma) çıktılayacaktır. Buradaki örnek oldukça basit, ancak 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 ile kullanılabilecek dört farklı açılış ve kapanış etiketi çifti vardır. Bunlardan ikisi, <?php ?> ve <script language="php"> </script> her zaman kullanılabilir durumdadır. Diğer ikisi, kısa etiketler ve ASP tarzı etiketler olup php.ini yapılandırma dosyası içersinden açılıp kapatılabilirler. 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.

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

1.  <?php echo 'XHTML ya da XML belgeleri sunacaksanız, böyle yapın'?>

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

3.  <? echo 'Bu en basit, SGML işlem yönergesidir'?>
    <?= ifade ?> Bu "<? echo ifade ?>" için bir kısayoldur.

4.  <% echo 'İsterseniz ASP tarzı etiketler kullanabilirsiniz'; %>
    <%= $degisken; # Bu "<% echo . . ." %> için bir kısayoldur.

Bir ve iki numaralı örneklerde gözüken etiketler her zaman kullanılabilirler. Bu ikisinden birincisi en geniş kullanıma sahip olanı ve en çok tercih edilenidir.

Kısa etiketler (üçüncü gibi) 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 (dördüncü örnek) php.ini dosyasında asp_tags yapılandırma yönergesiyle etkinleştirilmişlerse kullanılabilirler.

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. PHP 5.3'ten itibaren izin verilmektedir.

add a note add a note

User Contributed Notes 9 notes

up
291
quickfur at quickfur dot ath dot cx
7 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
88
ravenswd at gmail dot com
8 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
36
sgurukrupa at gmail dot com
3 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
36
snor_007 at hotmail dot com
7 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
9
mike at clove dot com
6 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
-9
admin at furutsuzeru dot net
8 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
-1
2290071451 at qq dot com
1 month ago
<script language='php'></script>这种写方在php7.0后已经不解析了。
up
-42
nath dot realmadrid at gmail dot com
2 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.
up
-57
Kalimuthu
3 years ago
One more disadvantage of using PHP short tags is that, it clashes with XML. Because XML also uses <? to open code blocks. See below sample XML code

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to> Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>
To Top