[英]how to insert special character in mysql via php and display on html page
如何將特殊字符插入數據庫(MySQL)之類的
Registered symbol ( ® )
或Copyright sign ( © )
或Trade Mark sign ( ™ )
另外我想在html頁面上顯示原始內容。
我必須在兩側(前端和后端)做什么,請詳細說明
哪個功能更有效?
$_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);
}
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.