簡體   English   中英

如何通過php在mysql中插入特殊字符並在html頁面上顯示

[英]how to insert special character in mysql via php and display on html page

如何將特殊字符插入數據庫(MySQL)之類的

Registered symbol ( ® )Copyright sign ( © )Trade Mark sign ( ™ )

另外我想在html頁面上顯示原始內容。

我必須在兩側(前端和后端)做什么,請詳細說明

哪個功能更有效?

方法1:

$_GET = array_map('trim', $_GET);
$_POST = array_map('trim', $_POST);

if(get_magic_quotes_gpc()){
  $_GET = array_map('stripslashes', $_GET);
  $_POST = array_map('stripslashes', $_POST);  

  $_GET = array_map('strip_tags', $_GET);
  $_POST = array_map('strip_tags', $_POST);  
 }
 else{
  $_GET = array_map('mysql_real_escape_string', $_GET);
  $_POST = array_map('mysql_real_escape_string', $_POST);   
 }

方法2:

  foreach ($_POST as $key=>$value){
        if (!get_magic_quotes_gpc()) {
          return addslashes(htmlentities(strip_tags($value),ENT_QUOTES,'UTF-8'));
          } 
          else {
             return htmlentities(strip_tags($value),ENT_QUOTES,'UTF-8');
          }
  }

我有點困惑有什么區別

htmlentities()htlspecialchars() ,我必須使用哪一個?

插入數據庫時​​應該使用哪個函數addslashes()stripslashes()

只需將這些符號添加到文本中,然后將其作為SQL查詢執行:

INSERT INTO tbl_name VALUES ("Here's my text: ©®");

當你想要顯示它時,網站不會對這些符號做任何事情(但要記得至少逃避<>& (使用htmlspecialchars() )因為它們在XML / SGML(HTML)文檔中具有特殊意義)

PS。 還記得使用mysql_real_escape_string()轉義傳遞給SQL查詢的文本,以避免任何SQL注入問題。 如果您的服務器啟用了magic_quotes_gpc請將其禁用或至少將您的GET / POST / COOKIE數據過濾為其原始值。 你應該始終有意識地逃避價值觀。

編輯:

根據你的評論...我不記得默認情況下是否啟用了magic_quotes_gpc ,但你可以輕松撤消魔法引號效果。 就在PHP代碼的最開頭,添加如下內容:

if (get_magic_quotes_gpc()) {
  array_walk_recursive($_GET, 'stripslashes');
  array_walk_recursive($_POST, 'stripslashes');
  array_walk_recursive($_COOKIE, 'stripslashes');
}

現在每個GPC值應該始終是原始的 - 沒有引號 - 所以你必須在將任何變量傳遞給查詢之前手動轉義它。

來自htmlentities()的PHP文檔:

此函數在所有方面與htmlspecialchars()相同,除了htmlentities()之外,所有具有HTML字符實體等效項的字符都將轉換為這些實體。

存儲時不要擔心編碼事物:將數據存儲為原始數據,然后在HTML中顯示時使用htmlentities()對其進行編碼。

編輯:另外,請閱讀此內容

首先,您應該在插入數據庫時​​使用mysql_real_escape_string - 這將確保您存儲的任何內容都是安全編碼的,但仍保留所有原始信息。

在輸出方面,htmlentities和htmlspecialchars之間的主要區別在於htmlentities 將轉換所有具有實體的字符,htmlspecialchars將只轉換<,>,&,“,”

只需使用准備好的陳述

$con = <"Your database connection">;
$input = "What's up? ®, ©, ™";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();

暫無
暫無

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

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