Ⅰ php程序usc2編碼如何轉換成ansi簡體中文編碼
給個轉碼的方法給你吧! 你可以自己修改$outEncoding的參數,下面的方法默認是轉換為gb2312的字元集了,你調用方法就可以將你的字元串轉換字元
//中文字元編碼轉換
public function safeEncoding($string,$outEncoding ='GB2312')
{
$encoding = "UTF-8";
for($i=0;$i<strlen($string);$i++)
{
if(ord($string{$i})<128)
continue;
if((ord($string{$i})&224)==224)
{
//第一個位元組判斷通過
$char = $string{++$i};
if((ord($char)&128)==128)
{
//第二個位元組判斷通過
$char = $string{++$i};
if((ord($char)&128)==128)
{
$encoding = "UTF-8";
break;
}
}
}
if((ord($string{$i})&192)==192)
{
//第一個位元組判斷通過
$char = $string{++$i};
if((ord($char)&128)==128)
{
// 第二個位元組判斷通過
$encoding = "GB2312";
break;
}
}
}
if(strtoupper($encoding) == strtoupper($outEncoding))
return $string;
else
return iconv($encoding,$outEncoding,$string);
}
Ⅱ php進行iconv編碼轉換時,未知字元導致轉換後數據丟失
iconv,轉碼時使用//INGORE忽略錯誤,不能轉換的字會被忽略掉。
Ⅲ php 添加語句資料庫出現亂碼
連接完資料庫要mysql_query('SET
NAMES
GBK');
該PHP文件保存類型要為ANSI
資料庫的連接形式什麼的也要是gbk的
最後實在不行你就把插入到資料庫中的數據執行一下轉碼iconv(「UTF-8″,」GBK」,$data);
再不行
哥也無語了
Ⅳ php亂碼怎麼辦
PHP中文亂碼一般是字元集問題,編碼主要有下面幾個問題。
一.首先是PHP網頁的編碼
1.php文件本身的編碼與網頁的編碼應匹配
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。保存為utf-8可能會有點麻煩,一般utf-8文件開頭會有BOM,如果使用session就會出問題,可用editplus來保存,在editplus中,工具->參數選擇->文件->UTF-8簽名,選擇總是刪除,再保存就可以去掉BOM信息了。
2.php本身不是Unicode的,所有substr之類的函數得改成mb_substr(需要裝mbstring擴展);或者用iconv轉碼。
二.PHP與Mysql的數據交互
PHP與資料庫的編碼應一致
1.修改mysql配置文件my.ini或my.cnf,mysql最好用utf8編碼
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
在[mysqld]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
2.在需要做資料庫操作的php程序前加mysql_query("set names '編碼'");,編碼和php編碼一致,如果php編碼是gb2312那mysql編碼就是gb2312,如果是utf-8那mysql編碼就是utf8,這樣插入或檢索數據時就不會出現亂碼了
三.PHP與操作系統相關
Windows和Linux的編碼是不一樣的,在Windows環境下,調用PHP的函數時參數如果是utf-8編碼會出現錯誤,比如move_uploaded_file()、filesize()、readfile()等,這些函數在處理上傳、下載時經常會用到,調用時可能會出現下面的錯誤:
Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...
Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...
Warning: filesize() [function.filesize]: stat failed for ... in ...
Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..
在Linux環境下用gb2312編碼雖然不會出現這些錯誤,但保存後的文件名出現亂碼導致無法讀取文件,這時可先將參數轉換成操作系統識別的編碼,編碼轉換可用mb_convert_encoding(字元串,新編碼,原編碼)或iconv(原編碼,新編碼,字元串),這樣處理後保存的文件名就不會出現亂碼,也可以正常讀取文件,實現中文名稱文件的上傳、下載。
其實還有更好的解決方法,徹底與系統脫離,也就不用考慮系統是何編碼。可以生成一個只有字母和數字的序列作為文件名,而將原來帶有中文的名字保存在資料庫中,這樣調用move_uploaded_file()就不會出現問題,下載的時候只需將文件名改為原來帶有中文的名字。實現下載的代碼如下
header("Pragma: public");
header("Expires: 0");
header("Cache-Component: must-revalidate, post-check=0, pre-check=0");
header("Content-type: $file_type");
header("Content-Length: $file_size");
header("Content-Disposition: attachment; filename=\"$file_name\"");
header("Content-Transfer-Encoding: binary");
readfile($file_path);
$file_type是文件的類型,$file_name是原來的名字,$file_path是保存在服務上文件的地址。
Ⅳ php中文亂碼問題
把你的PHP文件保存utf8格式,常用的方法,記事本打開=>另存為=>編碼選擇utf8=>覆蓋原文件
Ⅵ PHP中怎麼將UTF-8字元串轉化為ANSI編碼
使用notepad++編輯器,打開php文件,然後在菜單欄上面選擇:格式,選擇以ansi編碼,即可。
Ⅶ PHP的字元轉成ANSI編碼。。。求助。。。
用notepad++吧
選擇「格式」->"專為ANSI編碼"
ok
Ⅷ PHP無法讀取顯示TXT中的某些漢字,並且編碼轉換的過程中會丟失一部分數據
iconv是很容易出錯的,$str=iconv("gb2312","utf-8",$str);
最好是改成
$str=iconv("gb2312","utf-8//IGNORE",$str);
這個可以減少轉換編碼帶來的錯誤。
Ⅸ 如何用php創建ANSI型文本文件
PHP創建的文件都是ANSI的,例如:
<?php
file_put_contents('abc.txt','abc');
?>
這個程序運行會生成一個ANSI文件名字叫做abc.txt,內容就是abc三個字母。
補充:
如果你的PHP文件是UTF-8的,如果要轉換為ANSI(GBK)個數輸出到文件,那麼可以這樣:
file_put_contents('abc.txt',iconv('UTF-8','GBK','中文漢字'));
Ⅹ php+mysql 編程中 ansi編碼 utf-8編碼有區別嗎,會產生影響求指教
PHP頁面轉UTF-8編碼問題
1.在代碼開始出加入一行:
復制代碼代碼如下:
header("Content-Type: text/html;charset=utf-8");
2.PHP文件編碼問題
點擊編輯器的菜單:「文件」->「另存為」,可以看到當前文件的編碼,確保文件編碼為:UTF-8,
如果是ANSI,需要將編碼改成:UTF-8。
3.PHP文件頭BOM問題:
PHP文件一定不可以有BOM標簽
否則,會出現session不能使用的情況,並有類似的提示:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
這是因為,在執行session_start() 的時候,整個頁面不能有輸出,但是當由於前PHP頁面存在BOM標簽,
PHP把這個BOM標簽當成是輸出了,所以就出錯了!
所以PHP頁面一定要刪除BOM標簽
刪除這個BOM標簽的方法:
1.可以用Dreamweaver打開文件,並重新保存,即可以去除BOM標簽!
2.可以用EditPlus打開文件,並在菜單「首選項」->「文件」->"UTF-8標識",設置為:「總是刪除簽名」,
然後保存文件,即可以去除BOM標簽!
4.PHP以附件形式保存文件的時候,UTF-8編碼問題:
PHP以附件形式保存文件,文件名必須是GB2312編碼,
否則,如果文件名中有中文的話,將是顯示亂碼:
如果你的PHP本身是UTF-8編碼格式的文件,
需要將文件名變數由UTF-8轉成GB2312:
iconv("UTF-8", "GB2312", "$filename");
利用程序來實例字元截取方法
復制代碼代碼如下:
function utf8_substr($str,$len)
{
for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,0,1);
if(ord($temp_str) > 127){
$i++;
if($i<$len){
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}else {
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
return join($new_str);
}
MYSQL資料庫使用UTF-8編碼的問題
1.用phpmyadmin創建資料庫和數據表
創建資料庫的時候,請將「整理」設置為:「utf8_general_ci」
或執行語句:
復制代碼代碼如下:
CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
創建數據表的時候:如果是該欄位是存放中文的話,則需要將「整理」設置為:「utf8_general_ci」,
如果該欄位是存放英文或數字的話,默認就可以了。
相應的SQL語句,例如:
復制代碼代碼如下:
CREATE TABLE `test` (
`id` INT NOT NULL ,
`name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;
2.用PHP讀寫資料庫
在連接資料庫之後:
復制代碼代碼如下:
$connection = mysql_connect($host_name, $host_user, $host_pass);
加入兩行:
復制代碼代碼如下:
mysql_query("set character set 'utf8'");//讀庫
mysql_query("set names 'utf8'");//寫庫
就可以正常的讀寫MYSQL資料庫了。
用的appserv-win32-2.5.10做的環境,裝這個包的時候用默認的utf8編碼。
在寫資料庫連接文件時,寫成:
復制代碼代碼如下:
$conn = mysql_connect("$host","$user","$password");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db("$database",$conn);
然後在做頁面時,注意這句:
復制代碼代碼如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
這樣不管輸入資料庫的中文,還是頁面顯示,就都正常了。
在DW CS4版里,默認生成的也是utf8頁面。
同樣的,如果一開始寫資料庫連接文件時寫成:
復制代碼代碼如下:
mysql_query("SET NAMES 'GBK'");
那頁面也要相應變成:
復制代碼代碼如下:
<meta http-equiv="Content-Type" co