簡體   English   中英

使用PHP將文本插入MySQL數據庫時,字符集出現問題

[英]Problem with charset when inserting text into a MySQL DataBase with PHP

我正在嘗試使用PHP將文本從表單插入MySQL數據庫中。
問題是,當我在phpmyadmin中檢查數據庫時,我發現ü,ö,ä,è,é,à...之類的特殊字符已損壞,並且得到üöäéèÃ類的東西。我嘗試了以下方法:

  • accept-charset="latin1_swedish_ci"放入<form>標記中
  • 在php.ini文件中設置default_charset = "latin1_swedish_ci"
  • 放置mysqli_set_charset($dbc, 'latin1_swedish_ci'); mysql_query('SET NAMES latin1_swedish_ci'); mysqli_connect()函數之后
  • 將數據庫,表和各個列的排序規則設置為latin1_swedish_ci

我注意到直接在phpmyadmin中運行查詢時值沒有損壞,因此我認為錯誤一定是在PHP和/或MySQL連接中。
另外,我嘗試對utf-8_general_ci執行相同utf-8_general_ci ,並獲得了相同的結果。 似乎無視我的所作所為。
歡迎意見和建議。 多謝你們,
肖恩

不知道您是否嘗試過...但是在將希伯來語插入MySQL數據庫時遇到了同樣的問題。 我做了以下工作:數據庫表的排序規則是:utf8_unicode_ci

在PHP中,我這樣做:

@ $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset('utf8');

我創建一個新連接,然后將連接指定為UTF-8。

這解決了我在處理希伯來語時的問題...

我不能正確地說這是否是導致您出現問題的原因,但是無論如何,您都不能將charset和collat​​ion的Mysql說明符都不能放入HTML表單或PHP.ini中。

現在,您有點盲目地使用MySQL值,並把它放到您認為合適的任何地方-甚至不知道。 不要那樣做 首先,決定要使用和接受的編碼。 根據您的問題,我會說是latin1

因此,適當配置HTML和PHP:

<form accept-charset="latin1">

用於HTML表單元素。 請注意,HTML中沒有latin1_swedish_ci ,請參閱HTML文檔

下一個類似的地方是您的php.ini設置。 不存在像您放在那里的東西。 也將其更改為latin1

default_charset = "latin1"

糾正了這兩個設置后,瀏覽器就知道包含表單的頁面的編碼是什么,並且表單甚至向瀏覽器發出傳遞給服務器的數據的可接受編碼。

因此,這應確保PHP變量中包含的數據是latin1編碼的。 然后,如果正確配置了數據庫客戶端,數據庫服務器的編碼,兩者之間的連接的編碼以及數據庫中數據的編碼,則可以將這些數據傳遞到數據庫中。

但是,正確的表單設置是您首先需要執行的步驟,然后才能確保mysql連接不會引起麻煩。

對於希伯來語用戶:

HTML頁面:

<html lang="he">
  <head>
    <meta charset="utf-8">

PHP表格

header('Content-Type: text/html; charset=UTF-8');
$con = mysqli_connect("HOST","DB_USER","PASSWORD","DB_NAME");
$con->set_charset('utf8');

DB,TABLE,FEILDs COLLECTION

utf8_general_ci

確保排序規則和MYSQL連接排序規則都為latin1_swedish_ci

我認為您應該將頁面的字符編碼設置為:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

您可以使用

mysql_query("set character_set_results='utf8'");

在執行MySQL查詢之前

暫無
暫無

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

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