簡體   English   中英

使用 PHP 將特殊字符轉換為 MySQL

[英]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.

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