php設置字元集
A. php中使用mysqli創建資料庫的時候怎麼指定字元集和排序規則
字元集很簡單,但是數據的排序需要通過SQL語句來協助完成,ORDER BY 語句,代碼如下:
//假設你已經成功連接了資料庫($mysqli變數假設為連接的資源句柄)
//通過對象方式設置字元編碼
$mysqli->set_charset('utf8');
//通過函數方式設置字元編碼
mysqli_set_charset($mysqli,'utf8');
//那麼接下來是數據排序的話,需要編寫一條SQL查詢語句(DESC倒序排列|ASC正序排列)
$sql="SELECT`欄位`FROM`表名`WHERETRUEORDERBY`欄位`DESC;";
如果還有什麼問題,歡迎追問~
B. php怎麼設置編碼
header("Content-type: text/html; charset=utf-8");
另外你的編輯器編碼也要對應哦
a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的編碼格式為ANSI,可用記事本打開,另存為選擇編碼為ANSI,覆蓋源文件。
b. 如果欲使用utf-8編碼,那麼php要輸出頭 :header(「Content-Type: text/html; charset=utf-8"),靜態頁面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的編碼格式為utf-8。
最近需要用到iconv函數把抓取來過的utf-8編碼的頁面轉成gb2312, 發現只有用iconv函數把抓取過來的數據一轉碼數據就會無緣無故的少一些。 讓我郁悶了好一會兒,去網上一查資料才知道這是iconv函數的一個bug。iconv在轉換字元"—"到gb2312時會出錯。解決方法很簡單,就是在 需要轉成的編碼後加 "//IGNORE" 也就是iconv函數第二個參數後,如下:
iconv("UTF-8","GB2312//IGNORE",$data)
ignore的意思是忽略轉換時的錯誤,如果沒有ignore參數,所有該字元後面的字元串都無法被保存。
C. 如何讓wampserver php字元集
在給表中插入中文字元時顯示「??」,Bai一番後給my.ini的配置文件中增加了默認字元集的配置
解決方案一:
需要將MySQL的字元集改為UTF-8。左鍵點擊托盤區的WampServer圖標,選擇MySQL--my.ini,就會打開MySQL的配置文件 了,在[client]段落增加:default-character-set=utf8 ;在[mysqld]段落增加:character_set_server=utf8 。重啟MySQL服務即可。
以下的文章主要介紹的是MySQL資料庫中文亂碼的實際解決方案,可以說是較為實用的。我們大家都知道在使用MySQL資料庫時,我們對其插入一些中文字元的實際操作過程中經常會出現亂碼,中文全被用?代替。
出現這種情況的原因,多是字元集不匹配造成的。
在MySQL中,如果使用預設的字元集,在建庫、建表時,默認使用的是latin1字元集,為ISO 8859-1西歐字元集。
插入中文字元時,與之不匹配,就會出現亂碼。
本人使用的是MySQL 5.0版,並用C#操作MYSQL資料庫,當插入中文字元時,發現顯示的是亂碼。
初步估計是字元集沒有配對。查找後,發現MSYQL默認使用的是latin1,因此將資料庫的配置文件中的字元設置改為utf8,並在C#中將中文字元,轉為utf8,插入後,仍為亂碼。
MySQL也支持gb2312,又將MySQL的字元設置改為gb2312,C#中使用Default,重起MySQL後,操作仍然無效。
後想起,雖然將MySQL的字元集設置為gb2312或utf8,但已經建立的資料庫和表,仍採用的是默認的字元集,也即仍為當初的西歐字元集,最好,只得忍痛將資料庫刪除,重新以gb2312字元集建立資料庫和表。
再用C#插入中文字元後,一切OK。
再安裝好MySQL資料庫後,可以手工或使用配置工具,將my.ini文件中的默認字元集改為gb2312,再重新建庫和表時,不用再在語句中指定字元集,其默認設置也即為gb2312,可以正常顯示中文字元集。
D. php使用pdo連接mysql資料庫如何設置發送的字元集
和Mysql類裡面的用法一樣,他們只過不過是我們鏈接資料庫的中間橋梁變了,本質並沒有變,還是對資料庫進行操作,而操作的要利用SQL語句,所以這里可以用同樣的mysql語句即可,只不過執行函數變了!在mysql類裡面,我們用mysql_query(「SET NAMES gbk」);設置字元集編碼為gbk啦!在PDO裡面我們用$db->query("SET NAMES gbk");當然也有其他的函數也可以。http://wenku..com/view/57270c36a32d7375a4178002.html這里有網路文庫關於PDO的解釋和簡單使用!
E. php 怎麼增加字元集ZHS16GBK
默認編碼不一致造成問題
1、資料庫創建編碼選用一個如gb2312。
2、資料庫字元集校對選用一個gb2312,以上兩者必須一致。
3、不同編譯器或者工具如notepad、vim、editplus,它們默認文件的編碼不一致,保存的時候選擇相應的字元集保存。
4、頁面的環境不一樣造成,html中的head中meta中的charset=gb2312即可。
5、瀏覽器的設置默認編碼不一致,有的自動選擇,有的默認gb2312,許多頁面默認是utf8,造成亂碼,php文件採用header('Content-Type: text/html; charset=gb2312');告訴瀏覽器文本類型是html和字元集是gb2312.,header前面不能有任何輸出包括空格,此時可以不使用方法4.
綜上所述,亂碼的大部分原因。
F. PHP連接mysql字元集設置問題
頁面文件加上header("Content-Type:text/html;charset=gbk");
character_set_client=binary 改為character_set_client=gbk
在你的語句中修改下 character_set_client=gbk,再試試,如果不行
在MYSQL中執行下面的語句看看你的資料庫和表是什麼字元集,字元集和頁面要統一
1、顯示某資料庫字元集設置
show create database 你的資料庫名;
2、顯示某數據表字元集設置
show create table 你的表名;
G. php創建mysql數據表,怎麼選擇UTF8字元集
一、轉碼失敗
在數據寫入到表的過程中轉碼失敗,資料庫端也沒有進行恰當的處理,導致存放在表裡的數據亂碼。
針對這種情況,前幾篇文章介紹過客戶端發送請求到服務端。
其中任意一個編碼不一致,都會導致表裡的數據存入不正確的編碼而產生亂碼。
比如下面簡單一條語句:
set @a = "文本字元串";
insert into t1 values(@a);
變數 @a 的字元編碼是由參數 CHARACTER_SET_CLIENT 決定的,假設此時編碼為 A,也就是變數 @a 的編碼。
2. 寫入語句在發送到 MySQL 服務端之前的編碼由 CHARACTER_SET_CONNECTION 決定,假設此時編碼為 B。
3. 經過 MySQL 一系列詞法,語法解析等處理後,寫入到表 t1,表 t1 的編碼為 C。
那這里編碼 A、編碼 B、編碼 C 如果不兼容,寫入的數據就直接亂碼。
二、客戶端亂碼
表數據正常,但是客戶端展示後出現亂碼。
這一類場景,指的是從 MySQL 表裡拿數據出來返回到客戶端,MySQL 里的數據本身沒有問題。客戶端發送請求到 MySQL,表的編碼為 D,從 MySQL 拿到記錄結果傳輸到客戶端,此時記錄編碼為 E(CHARACTER_SET_RESULTS)。
那以上編碼 E 和 D 如果不兼容,檢索出來的數據就看起來亂碼了。但是由於數據本身沒有被破壞,所以換個兼容的編碼就可以獲取正確的結果。
這一類又分為以下三個不同的小類:
1)欄位編碼和表一致,客戶端是不同的編碼
比如下面例子, 表數據的編碼是 utf8mb4,而 SESSION 1 發起的連接編碼為 gbk。那由於編碼不兼容,檢索出來的數據肯定為亂碼。
2)表編碼和客戶端的編碼一致,但是記錄之間編碼存在不一致的情形
比如表編碼是 utf8mb4,應用端編碼也是 utf8mb4,但是表裡的數據可能一半編碼是 utf8mb4,另外一半是 gbk。那麼此時表的數據也是正常的,不過此時採用哪種編碼都讀不到所有完整的數據。這樣數據產生的原因很多,比如其中一種可能性就是表編碼多次變更而且每次變更不徹底導致(變更不徹底,我之前的篇章里有介紹)。舉個例子,表 t3 的編碼之前是 utf8mb4,現在是 gbk,而且兩次編碼期間都被寫入了正常的數據。
3)每個欄位的編碼不一致,導致亂碼和第二點一樣的場景。不同的是:非記錄間的編碼不統一,而是每個欄位編碼不統一。舉個例子,表 c1 欄位 a1,a2。a1 編碼 gbk,a2 編碼是 utf8mb4。那每個欄位單獨讀出來數據是完整的,但是所有欄位一起讀出來,數據總會有一部分亂碼。
三、LATIN1
還有一種情形就是以 LATIN1 的編碼存儲數據
估計大家都知道字元集 LATIN1,LATIN1 對所有字元都是單位元組流處理,遇到不能處理的位元組流,保持原樣,那麼在以上兩種存入和檢索的過程中都能保證數據一致,所以 MySQL 長期以來默認的編碼都是 LATIN1。這種情形,看起來也沒啥不對的點,數據也沒亂碼,那為什麼還有選用其他的編碼呢?原因就是對字元存儲的位元組數不一樣,比如 emoji 字元 "❤",如果用 utf8mb4 存儲,佔用 3 個位元組,那 varchar(12) 就能存放 12 個字元,但是換成 LATIN1,只能存 4 個字元。
H. PHP中哪個函數可以強制統一設置所有字元編碼為指定編碼
一般都是utf-8和gbk,gbk的一般沒有什麼問題。
utf-8最好在apache服務端就設定為utf-8。然後其他的地方,資料庫、文件都設置為UTF-8,就不會有錯了。
在php函數庫有一個函數:iconv(),iconv函數庫能夠完成各種字元集間的轉換,是php編程中不可缺少的基礎函數庫。
最近在做一個小偷程序,需要用到iconv函數把抓取來過的utf-8編碼的頁面轉成gb2312, 發現只有用iconv函數把抓取過來的數據一轉碼數據就會無緣無故的少一些。 讓我郁悶了好一會兒,去網上一查資料才知道這是iconv函數的一個bug。iconv在轉換字元"—"到gb2312時會出錯。
php編程技術:
PHP是一種易於學習和使用的伺服器端腳本語言。只需要很少的編程知識你就能使用PHP建立一個真正交互的WEB站點。 PHP是能讓你生成動態網頁的工具之一。PHP網頁文件被當作一般HTML網頁文件來處理並且在編輯時你可以用編輯HTML的常規方法編寫PHP。