PHP html kodu içine veritabanından sonuçlar yankı en iyi yolu nedir?

3 Cevap php

Ben veritabanında böyle bir değere sahip olduğunda ("foo")

nasıl html kodu ile herhangi bir çatışma olmadan yankı

uyarı

<input type="text" value="<? echo '"foo"'; ?>" />

Sonuç böyle olacak

<input type="text" value=""foo"" />

bunu nasıl düzeltebilirim?

3 Cevap

Bunu gibi, bu sorunu aşmak için htmlentitiesi kullanabilirsiniz:

<input type="text" value="<? echo htmlentities('"foo"'); ?>" />

Bu dönecektir

<input type="text" value="&quot;foo&quot;" />

html ile herhangi bir çatışma kaçınarak.

htmlspecialchars () temel olarak, örneğin,

<input type="text" value="<? echo htmlspecialchars($value, ENT_QUOTES); ?>" />

ENT_QUOTES isteğe bağlıdır ve aynı zamanda tek bir alıntı "kodlar.

Ben size (ya da tırnak işaretleri olmadan?) Veritabanında var tam olarak emin değilim ama ben o $ değer denir, siz yine de kullanmak istiyorsanız değişkenin bir çeşit oturup, bu yüzden çünkü ben $ değeri kullanılır.

Yukarıda biraz hantal olduğu için ben bunun için bir sarıcı yaptı:

// htmlents($string)
function htmlents($string) {
  return htmlspecialchars($string, ENT_QUOTES);
}

Yani yapabilirsiniz

<input type="text" value="<? echo htmlents($value); ?>" />

all standart olmayan karakterler kodlar mevcut Htmlentities () ile karıştırılmamalıdır. htmlspecialchars () tek doğru, tüm web sayfalarının UTF8 vardır (UTF8 sayfaları için daha uygun olan, 'kodlar &, <,>, "ve? ;-).

First, don't use short tags ('

Eğer tırnak ekstra bir dizi var çünkü sonra, HTML bozuk. Eğer HTML içine PHP gömme yaklaşım gibi görünüyor bu yana, daha sonra hızlı bir düzeltme:

<input type="text" value="<?php echo 'foo'; ?>" />

Bu değer veritabanından geliyor çünkü bir değişkende saklanır rağmen ..., muhtemelen bir dizi, bu yüzden kod daha fazla gibi görünmelidir:

<input type="text" value="<?php echo $db_row['foo']; ?>" />

Anlaşılır olması için, çoğu programcı ayrıştırılır ve kod ya bir şablon smarty gibi sistemini kullanarak veya olmayan ayrýþtýrýlmýþ PHP arasındaki geçiş ortadan kaldırmak için denemek istiyorum ....

<?php
 ....
 print "<input type='text' value='$db_row[foo]' />\n";
 ....
?>

(Not

Değişken PHP bir blok ile çift tırnak içinde olduğunda 1), değer otomatik olarak ikame edilir

Bir çift tırnaklı dizge içinde bir ilişkisel dizi girişine atıfta zaman 2), indeks alıntı DEĞİLDİR.

HTH

C.