2013-04-04 13 views
6

parametreleriyle bile çalışmaz. Bu, daha önce sorulmamış ve şimdiye kadar işe yaramayan çözümler aramış. Ben htmlentities veya htmlspecialchars kullanarak kendi html equivelents için TM sembolü ve işareti dışarı değiştirmek istiyorum:PHP htmlentities,

$TEST = "Kold Locker™ & other stuff"; 
echo "ORGINIAL: " . $TEST . "<BR/>"; 

echo "HTML: " . htmlentities($TEST, ENT_COMPAT, 'UTF-8'); 

Bu görüntüler:

ORGINIAL: Kold Locker™ & other stuff 
HTML: 

Ben de htmlspecialchars ile denedim ve ikinci parametre değişti aynı sonuçla.

Diğerlerinin başka çözümlerde çalıştığını iddia ettikleri eksik şey nedir?

GÜNCELLEME: Sadece utf8_encode($TEST) görüntülendiği çalıştım ve

+0

display_errors öğesini "1" olarak ayarlayın ve error_reporting öğesini "E_ALL" olarak ayarlayın. Büyük olasılıkla bir hata mesajı alıyorsunuz. – Halcyon

+0

php hangi sürüme izin veriyor? – Prisoner

+0

Hata bildirimi yok listelendi – ToddN

cevap

2

Kodunuz benim için çalışıyor HTML: Kold Locker™ & other stuff görüntülenen: -?

manual page for htmlentities() biz okuyabilir:

Dönüş

kodlanmış dize döndürür Değerleri. ENT_IGNORE veya ENT_SUBSTITUTE ya bayrak ayarlanır sürece

giriş dizesi boş bir dize kodlayan belirli bir içinde geçersiz kod birimi sekans varsa

, döndürülür.

Benim tahminim girdi verileri düzgün UTF-8 olarak kodlanmış değildir ve işlev boş bir dize dönen olmasıdır. (Bu kısım hâlâ çalışır sonra komut dosyası, yani kod kilitleniyor olmadığını varsayarsak.) Ben yok

+0

Sanırım bir şey içindesiniz, 'htmlentities' eklemeden önce denememe ve kodlama yapmama izin ver – ToddN

5

neden bilmek, bu benim için çalıştı

$html="<html> <head><head>something like this </html>" 
$entities_correction= htmlentities($html, ENT_COMPAT, 'UTF-8'); 
echo htmlentities($entities_correction, ENT_COMPAT, 'UTF-8'); 
( htmlentities benim iki kez çağrılacak vardır)

çıkışı:

&lt;html&gt; &lt;head&gt;&lt;head&gt;something like this &lt;/html&gt;

+1

Bu garip çünkü temelde kodlamak için iki kez htmlentities çağırmak zorundayım. Niye ya? Garipti çünkü daha önce hiç bu problemi yaşamadım ve hiçbir yerde kendi başına çalışmayacaktı. –

3

ben de aynı problem vardı düşünce Pjack (8:54 at Jul 14 msg) olarak:

$str = "A 'quote' is <b>bold</b>"; 
echo htmlentities($str); 

Tarayıcı (benim durumumda Firefox) orijinal string $ dizge (içinde verir herhangi olmadan

echo htmlentities(htmlentities($str)); 

verir

iken) için:

A 'quote' is &lt;b&gt;bold&lt;/b&gt; 

(kullandığım PHP/5.4.16 pencere-7 XAMPP) dan elde edilmiştir.Ancak, daha fazla düşünce sonra Tarayıcı'nın dizeleri & lt; ve & gt; as> ve <. (Tarayıcıda kaynak koduna bakın). Htmlentities'in ikinci çağrısı &'u &amp;'a çevirir ve daha sonra Tarayıcı ilk olarak beklediğiniz şeyi gösterir.

0

Hemen hemen aynı problem vardı (her seferinde aynı metni her zaman gösterdi) ve farklı ekoların bir kombinasyonu ile anladım. Firefox gibi web sayfalarının her seferinde aynı metni gösterdiği görülüyor. Bunun nedeni, echo htmlentities-text olduğunda, yankılanırken tekrar normal metne dönüştürülür. Değişken/metin ile bir betik eklediğimde console.log ged olması, aslında htmlentities metnini (hemen hemen) doğru olarak yansıtır. Her özel char'i html-codings ile değiştirmek yerine, daha önce daha önce gördüğüm başka bir kod ile değiştirir (ismini hatırlayamıyorum). Yine html yetenekleri tekrar tekrar aynı metinleri aldım (herşeyi dönüştürdüğünü hatırla), ancak konsol.log sürümünde yankılandırarak bana beklenen sonucu verir. Şimdi, yine, sonuç olarak:
1. htmlentities'u iki kez çalıştırın!
2. (en az ateş ile birlikte) Sakın yankı web sayfasına halinde normal olarak htmlentities. Değerin gerçekten doğru olup olmadığını kontrol etmek isterseniz, konsola kaydeden bir komut dosyasını tekrarlayın. Bu aynı sorunla diğer adamlar yardımcı olabilir umut
,
VicStudio

DÜZENLEME: 3. etmek accept-charset="UTF-8" (veya başka bir karakter kümesi) eklemeyi unutmayın düğünle, bir $_POST Formular kullanıyorsanız <form> etiketi.

DAHA FAZLA DÜZENLEME: Sonuçlarınızı sayfaya normal şekilde eklemek isterseniz, yalnızca 2 kez htmlentities yapın. Doğrudan göndermek isterseniz. bir veritabanı, sadece bir kez yapın! -> daha önce söylediğim şey kısmen yanlış. :(