[英]Special Characters into MySQL using PHP
我已經在我的數據庫中設置了一個表來從 json 文件中加載包含特殊字符的記錄。 我正在使用以下 PHP 代碼上傳記錄。
<!DOCTYPE html>
<html>
<head>
<title>Insert Records</title>
</head>
<body>
<h1>Insert OER Records from JSON File</h1>
<h2>Outputs:</h2>
<?php
ini_set('memory_limit','2000M');
$url = 'path/filename.json';
$contents = file_get_contents($url);
$contents = utf8_encode($contents);
$results = json_decode($contents, true);
include 'connection.php';
// Counter for number of records (x)
$x = 0;
foreach($results as $key => $value) {
$x = $x + 1;
foreach($value as $k => $v) {
$type = $value['type'];
$title = $value['title'];
$title = str_replace("'", "\'", $title);
$title = str_replace("(", "\(", $title);
$title = str_replace(")", "\)", $title);
$author = $value['author'];
$author = str_replace("'", "\'", $author);
$author = str_replace("(", "\(", $author);
$author = str_replace(")", "\)", $author);
$link = $value['link'];
$source = $value['source'];
$source = str_replace("'", "\'", $source);
$source = str_replace("(", "\(", $source);
$source = str_replace(")", "\)", $source);
$description = str_replace("'", "\'", $description);
$description = str_replace("(", "\(", $description);
$description = str_replace(")", "\)", $description);
$description = $value['description'];
$base_url = $value['base_url'];
$isbn_number = $value['isbn_number'];
$e_isbn_number = $value['e_isbn_number'];
$publication_date = $value['publication_date'];
$license = $value['license'];
$subject = $value['subject'];
$image_url = $value['image_url'];
$review = $value['review'];
$language = $value['language'];
$loc_collection = $value['loc_collection'];
$license_url = $value['image_url'];
}
$sql = "INSERT INTO oer_search (type, title, author, link, source, description, base_url, isbn_number, e_isbn_number, publication_date, license, subject, image_url, review, language, license_url) VALUES ('$type', '$title', '$author', '$link', '$source', '$description', '$base_url', '$isbn_number', '$e_isbn_number', '$publication_date', '$license', '$subject', '$image_url', '$review', '$language', '$license_url')";
if (mysqli_query($conn, $sql)) {
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
echo "This many records were entered into the database: " . $x;
mysqli_close($conn);
?>
<br/><br/><br/><br/><br/>
</body>
</html>
我將數據庫設置為 utf8_general_ci。 但是,帶有特殊字符的記錄無法正確顯示。 我得到這樣的結果MuhÌ£ammad Kurd Ê»AliÌ
。 有什么我想念的嗎?
您沒有正確使用 mysqli。 (不是你的錯,因為 PHP 手冊解釋得不夠好)
要打開與 mysqli 的連接,您至少必須執行以下操作:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // enable error reporting
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8');
set_charset()
方法確保發送到數據庫的數據使用正確的字符集。 沒有它,數據可能會被破壞。
您還必須使用此行啟用正確的 mysqli 錯誤報告:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
如果沒有它,您將需要使用mysqli_error($conn)
檢查錯誤,如果誤用,可能會將敏感信息泄露給用戶。
不要使用utf8_encode()
。 大多數時候你不需要這個 function。 除非您真的知道自己在做什么,否則請擺脫它。
警告:
utf8_general_ci
是一個非常古老且過時的字符集。 如果您使用 MySQL 5.5.3 或更高版本或 MariaDB 您應該使用utf8mb4
字符集。 請參閱MySQL 中的 utf8mb4 和 utf8 字符集有什么區別?
您必須在文件中使用相同的編碼。
您的數據庫已在 utf8 中創建,您的 php 文件已在您的 php 文件 crud 中使用此代碼。
mysqli_query("SET NAMES 'utf8'");
mysqli_query('SET character_set_connection=utf8');
mysqli_query('SET character_set_client=utf8');
mysqli_query('SET character_set_results=utf8');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.