2011-04-15 14 views
22

Burada garip bir şeyler oluyor ve nedenini anlayamıyorum php 5.2.5 sunucusunda (Sadece Linux'ta, Windows php sunucularında aynı sorun yok) Form POST "é" içeren bir girdi içerik göndermek ve diğer tarafta benhtmlentities utf-8 dizeleri imha ediyor

echo(htmlentities($_POST["myinput"])) 

o yankılar é

Ama yankı eğer benim

$_POST["myinput"] 

sadece "é" gösteriyor, bu yüzden htmlentities varsayılan olarak UTF-8 kullanmıyor, htmlentities tarafından kullanılan Charset'i nerede değiştirebilirim?

Onu php.ini default_charset = "UTF-8" 'de değiştirmeyi denedim, ancak işe yaramıyor mu?

+0

İlk bağlantı noktası: [manuel] (http://www.php.net/htmlentities). :) –

+0

El kitabını okudum, sorum, htmlentities de varsayılan kodlamasını nasıl değiştirebilirim ... ISO-8859-1 varsayılan olarak kullanıldığını, "varsayılan" nosyonunun bir yerde değişebileceğini ima ettiğini söylüyor ... ama php tarafından kullanılan default_charset'i değiştirdiğimde bile çalışmadı. – Dominique

+0

Bu, HTML öğelerinin UTF-8 olarak kodlanmış bir HTML belgesinde 'é 'görüntülemek için HTML varlıklarına gerek duymadığına dikkat çekiyor. –

cevap

47

htmlspecialchars($str, ENT_QUOTES, "UTF-8")

Bu aynı zamanda htmlentities() 'in kodlama değiştirmek için sadece htmlentities()

+1

Haklısınız, ama yine de eminim ki 3. paramları hiç kullanmadım ve bu problemi hiç elde etmedim, bu durum ev sahibimin son zamanlarda yaptığı bir değişiklikle ilgili olabilir mi? – Dominique

+1

Bu harika! Benim için MySQL 'UTF-8' (büyük!) Olarak sütunlara sahipti, fakat karakter kümesini UTF-8 istemci tarafına ayarladığımda, 'htmlentities() 'yi kullandığım gibi kullanmıyordum. dil (soru işaretleri olan siyah elmaslardı).Bu ekstra iki parametre bana zaman kazandırdı, teşekkürler! – Jimbo

+1

Resmi el kitabından htmlentities(), dönüşümde kullanılan kodlamayı tanımlayan isteğe bağlı üçüncü bağımsız değişken kodlamasını alır. PHP 5.6.0'dan itibaren default_charset değeri varsayılan olarak kullanılır. PHP 5.4.0'dan itibaren, UTF-8 varsayılan değerdir. PHP 5.4.0'dan önce, ISO-8859-1 varsayılan olarak kullanılır. Bu argüman teknik olarak isteğe bağlı olsa da, kodunuz için doğru değeri belirtmeniz şiddetle tavsiye edilir. http://fi2.php.net/manual/en/function.htmlentities.php – Nico

3

tek yolu daha XSS önleme daha da üçüncü parametre belirtme edilir.

Varsayılan kodlamayı değiştirmenin bir yolu yoktur. PHP 5.4'ten önce Her zaman iso-8859-1'dur.

Bu

artık her zaman sürümü 5.4.0 kodlama parametresi için varsayılan değer olarak utf-8

5

UTF-8 olarak değiştirildi ancak PHP 5.4 değişti ve olduğunu edildi.

Kaynak: Manual

+0

Ve tekrar 5.6.0 olarak değiştirildi. "PHP 5.6.0'dan itibaren default_charset değeri varsayılan olarak kullanılır." [Http://www.danshort.com/HTMLentities/index.php?w=punct](http://www.danshort.com/HTMLentities/index.php?w=punct] adresinden –

0

Ve sizin için çalışmıyor çok farklı charset codings hakkında veya htmlentities eğer endişe istemiyorsanız, buraya alternatif: kullandığım mysqli DB bağlantısı (ve PHPV5) MySQl DB'ye yazma/ekleme için form yazısı. php manual kaynaktan

$Notes = $_POST['Notes']; //can be text input or textarea. 

$charset = mysqli_character_set_name($link); //mysqli connection 
printf ("To check your character set but not necessary %s\n",$charset); 

$Notes = str_replace('"', '"', $Notes); //double quotes for mailto: emails. 
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well 
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); 
$Notes = str_replace($von, $zu, $Notes); 
echo " Notes:".$Notes."<br>" ; 
$Notes = mysqli_real_escape_string($link, $Notes); //for mysqli DB connection. 
// Escapes special characters in a string for use in an SQL statement 

echo " Notes:".$Notes ; //ready for inserting 
+0

daha fazla htmlentity. – KarlosFontana

+0

İçindekileri görüntülerken: Komik karakterler görünürse başlıktaki bu satır. KarlosFontana

1

: htmlentities() dönüştürmede kullanılan kodlama tanımlayan bir isteğe bağlı üçüncü bir bağımsız değişken kodlama alır. PHP 5.6.0'dan itibaren default_charset değeri varsayılan olarak kullanılır. PHP 5.4.0'dan itibaren, UTF-8 varsayılan değerdir. PHP 5.4.0'dan önce, ISO-8859-1 varsayılan olarak kullanılır. Bu argüman teknik olarak isteğe bağlı olsa da, kodunuz için doğru değeri belirtmeniz şiddetle tavsiye edilir.