簡體   English   中英

htmlentities破壞utf-8字符串

[英]htmlentities destroys utf-8 strings

我在這里發生了一些奇怪的事情,我無法理解為什么,在我的php 5.2.5服務器上(僅在Linux上,Windows php服務器沒有同樣的問題)當我使用POST表單在包含的輸入上發布內容時“é”在另一邊我

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

它回聲é

但如果我回應我的

$_POST["myinput"] 

只是它顯示“é”,所以這意味着我的htmlentities默認不使用UTF-8,我在哪里可以更改htmlentities使用的Charset?

我嘗試在我的php.ini default_charset =“UTF-8”中更改它,但它也不起作用?

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

這在預防xss方面也比htmlentities()更好htmlentities()

在版本5.4.0中,encoding參數的默認值已更改為UTF-8。

資料來源: 手冊

更改htmlentities()編碼的唯一方法是在第三個參數中指定它。

無法更改默認編碼。 在PHP 5.4之前它始終是iso-8859-1

這在PHP 5.4中已經改變,但現在總是utf-8

從PHP 手冊 :htmlentities()采用可選的第三個參數編碼,定義轉換中使用的編碼。 從PHP 5.6.0開始,default_charset值用作默認值。 從PHP 5.4.0開始,UTF-8是默認值。 在5.4.0之前的PHP,ISO-8859-1用作默認值。 盡管此參數在技術上是可選的,但我們強烈建議您為代碼指定正確的值。

如果您不想擔心這么多不同的字符集編碼或者如果htmlentities不適合您,可以選擇以下方法:我使用mysqli DB連接(和PHPV5)表單發送/插入MySQl DB。

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM