當前位置:首頁 » 編程語言 » php漢字轉utf8

php漢字轉utf8

發布時間: 2022-06-08 16:44:28

A. php中如何把一個字元串轉換為utf-8編碼的 如題 謝謝了

1、把 GBK 編碼字串轉換成 UTF-8 編碼字串 view plain to clipboardprint? <?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("你是我的好朋友","UTF-8","GBK"); ?> 2、把 UTF-8 編碼字串轉換成 GB2312 編碼字串 view plain to clipboardprint? // 注意將此文件存檔成 utf-8 編碼格式文件再測試 <?php header("content-Type:text/html;charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb2312","utf-8"); ?> // 注意將此文件存檔成 utf-8 編碼格式文件再測試 <?php header("content-Type: text/html; charset=gb2312"); echo mb_convert_encoding("你是我的好朋友","gb312","utf-8"); ?> 3、對整個頁面進行轉換 該方法適用所有編碼環境。這樣把前128個字元以外(顯示字元)的字元集都用 NCR(Numeric character reference,如「漢字」將轉換成「汉字」這種形式)來表示,這樣的編碼在任意編碼環境下頁面都能正常顯示。 在php文件的頭部加上下面三行代碼: view plain to clipboardprint? mb_internal_encoding(」gb2312″); // 這里的gb2312是你網站原來的編碼 mb_http_output(」HTML-ENTITIES」); ob_start(』mb_output_handler』); mb_internal_encoding(」gb2312″); // 這里的gb2312是你網站原來的編碼 mb_http_output(」HTML-ENTITIES」); ob_start(』mb_output_handler』); 使用mb_convert_encoding 函數需啟用PHP 的mbstring (multi-byte string)擴展

B. 怎麼用PHP把unicode轉成utf8

function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar = $r[0];
//print_r($ar);
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == "&#x"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "&#") {

$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
echo unescape("紫星藍");
今天有用戶反饋,表單系統用戶提交的數據中文會亂碼。測試發現問題出在 iconv 轉換上。
iconv('UCS-2', 'GBK', '中文')
Google 搜索發現,原因是 linux 伺服器上 UCS-2 編碼方式與 Winodws 不一致。
於是,我改成 iconv('UCS-2BE', 'GBK', '中文') 試試,中文正常了

以下是有關兩個平台 UCS-2 編碼的潛規則:

1, UCS-2 不等於 UTF-16。 UTF-16 每個位元組使用 ASCII 字元范圍編碼,而 UCS-2 對每個位元組的編碼可以超出 ASCII 字元范圍。UCS-2 和 UTF-16 對每個字元至多佔兩個位元組,但是他們的編碼是不一樣的。

2, 對於 UCS-2, windows 下默認是 UCS-2LE。用 MultibyteToWidechar(或者A2W)生成的是 UCS-2LE 的 unicode。windows記事本可以將文本保存為 UCS-2BE,相當於多了層轉換。

3, 對於 UCS-2, linux 下默認是 UCS-2BE。用iconv(指定UCS-2)來轉換生成的是 UCS-2BE 的 unicode。如果轉換windows平台過來的 UCS-2, 需要指定 UCS-2LE。

4, 鑒於windows和linux等多個平台對 UCS-2 的理解不同(UCS-2LE,UCS-2BE)。MS 主張 unicode 有個引導標志(UCS-2LE FFFE, UCS-2BE FEFF),以表明下面的字元是 unicode 並且判別 big-endian 或 little-endian。 所以從 windows 平台過來的數據發現有這個前綴,不用慌張。

5, linux 的編碼輸出,比如從文件輸出,從 printf 輸出,需要控制台做適當的編碼匹配(如果編碼不匹配,一般和該程序編譯時的編碼有若干關系),而控制台的轉換輸入需要查看當前的系統編碼。比如控制台當前的編碼是 UTF-8, 那麼 UTF-8 編碼的東西能正確顯示,GBK 就不能;同樣,當前編碼是 GBK, 就能顯示 GBK 編碼,後來的系統應該更智能的處理好更多的轉換了。不過通過 putty 等終端還是需要設置好終端的編碼轉換以解除亂碼的煩惱。
PHP中對漢字進行UNICODE編碼和解碼的實現
//將內容進行UNICODE編碼
function unicode_encode($name)
{
$name = iconv('UTF-8', 'UCS-2', $name);
$len = strlen($name);
$str = '';
for ($i = 0; $i < $len - 1; $i = $i + 2)
{
$c = $name[$i];
$c2 = $name[$i + 1];
if (ord($c) > 0)
{ // 兩個位元組的文字
$str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);
}
else
{
$str .= $c2;
}
}
return $str;
}
$name = 'MY,你大爺的';
$unicode_name=unicode_encode($name);
echo '<h3>'.$unicode_name.'</h3>';
// 將UNICODE編碼後的內容進行解碼
function unicode_decode($name)
{
// 轉換編碼,將Unicode編碼轉換成可以瀏覽的utf-8編碼
$pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
preg_match_all($pattern, $name, $matches);
if (!empty($matches))
{
$name = '';
for ($j = 0; $j < count($matches[0]); $j++)
{
$str = $matches[0][$j];
if (strpos($str, '\\u') === 0)
{
$code = base_convert(substr($str, 2, 2), 16, 10);
$code2 = base_convert(substr($str, 4), 16, 10);
$c = chr($code).chr($code2);
$c = iconv('UCS-2', 'UTF-8', $c);
$name .= $c;
}
else
{
$name .= $str;
}
}
}
return $name;
}
echo 'MY,\u4f60\u5927\u7237\u7684 -> '.unicode_decode($unicode_name);

C. 求助關於PHP轉換漢字為UTF8字元的問題

這樣改試試.
注釋掉這段
/*
if($value < 223){
$str[$i] = rawurlencode(utf8_decode($str[$i]));
//先將utf8編碼轉換為ISO-8859-1編碼的單位元組字元,urlencode單位元組字元.
//utf8_decode()的作用相當於iconv("UTF-8","CP1252",$v)。
}else{
$str[$i] = "\u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}
*/
然後把這行$str[$i] = "\u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
拿出到底下.
========================
改完如下:
<?php
function escape($str) {
preg_match_all("/[\xc2-\xdf][\x80-\xbf]+|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]

{3}|[\x01-\x7f]+/e",$str,$r);
//匹配utf-8字元,
$str = $r[0];
//var_mp( $str);
$l = count($str);
for($i=0; $i<$l; $i++){
$value = ord($str[$i][0]);

/*
if($value >= 192 && $value <= 223) $i++;//單位元組
elseif($value >= 224 && $value <= 239) $i = $i + 2;//雙位元組
elseif($value >= 240 && $value <= 247) $i = $i + 3;//三位元組
*/
/*
if($value < 223){
$str[$i] = rawurlencode(utf8_decode($str[$i]));
//先將utf8編碼轉換為ISO-8859-1編碼的單位元組字元,urlencode單位元組字元.
//utf8_decode()的作用相當於iconv("UTF-8","CP1252",$v)。
}else{
$str[$i] = "\u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}*/

$str[$i] = "\u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}
return join("",$str);
}
$title="天使寶貝'開心的笑";
$url= escape(iconv('gb2312','utf-8',$title));
echo $url;
?>

D. 如何把php文件編碼更改為utf-8

與 php 編碼有關的,有兩處地方:


1、php 文件本身的編碼格式:

根據使用 php 編寫軟體的不同,其操作方法有所區別,比如 phpDesigher 軟體:


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

E. 如何用php設置utf-8編碼

在你的源文件找到<meta http-equiv="content-type" content="text/html;charset=utf-8">charset= 後面接的就是編碼,你全部改了就可以了。如果你改了之後變成亂碼的話,那你就只能先建一個utf-8編碼的網頁,把相應的內容重新輸入進去。

F. php 怎麼將2進制數據中的中文轉換為utf-8

使用以下函數:
string iconv ( string $in_charset , string $out_charset , string $str )

例:
str1 = '漢字'; // 假設此php源文件以GBK編碼保存,那麼str1就是GBK編碼,佔4個位元組
str2 = iconv('GBK', 'UTF-8', str1); // str2是utf8編碼,佔6個位元組

說明:如果你的php源文件已經以utf8編碼保存,就不需要這樣轉換了。

其它相關函數:
mb_convert_encoding

G. PHP 輸出簡單的中文 亂碼問題

解決php中中文亂碼問題方法

  1. php文件本身的編碼與網頁的編碼應匹配


    a. 如果欲使用gb2312編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=gb2312"),靜態頁面添加<metahttp-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的編碼格式為ANSI,可用記事本打開,另存為選擇編碼為ANSI,覆蓋源文件。


    b. 如果欲使用utf-8編碼,那麼php要輸出頭:header(「Content-Type: text/html; charset=utf-8"),靜態頁面添加<metahttp-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轉碼。

  3. 如果你的HTML文件文件出現了亂碼問題,那麼你可以在head標簽裡面加入UTF8編碼(國際化編碼):UTF-8是沒有國家的編碼,也就是獨立於任何一種語言,任何語言都可以使用的。

(7)php漢字轉utf8擴展閱讀:

解決PHP 輸出簡單的中文 亂碼問題的其他方法:

在php的echo前面加入header("Content-Type:text/html;charset=gb2312")

把<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />中的UTF-8改成gb2312

H. php 怎麼將任意編碼的內容轉換成utf-8

最簡單的:
$str = iconv("gbk", "utf-8//ignore", $str);
或者:
$str = mb_convert_encoding($str, "utf-8", "gbk");

稍微解釋一下 //ignore 的意思是轉換不了的字元就忽略。建議把這個寫上。否則遇到轉換不了的字元會報錯。gbk替換成你需要轉換的編碼就可以了。

I. php怎麼將未知編碼文本轉換為UTF-8

這樣不行。讓PHP自動判斷編碼格式,都轉換成UTF-8的。搜到一個帖子,是通過判斷文件頭來判斷編碼,但是我覺得應該有更簡單的方法。mb_convert_encoding($text, 'UTF-8','GB2312,UTF-8');這個函數基本實現了功能,但是有些編碼如Unicode就會亂碼 (用記事本保存時可以選,不知道是不是一種編碼)。應該把盡量多的編碼放到函數第三個參數上就可以吧。

J. PHP如何把數組里的中文Unicode轉換成Utf-8編碼

很明顯你截的圖是是JSON數據,如果是數組應二維數組的括弧應該是[]而不是{}。
所以轉換應該使用json_decode。比如對象名為$list,則:$list = json_decode($list, true);
出現中文Unicode的問題是,存儲數據轉成json時第二個參數使用錯誤,包含中文而不轉義的需要使用JSON_UNESCAPED_UNICODE;這樣存到資料庫才是中文。如:$list = json_encode($list, JSON_UNESCAPED_UNICODE);

熱點內容
滬江網校安卓怎麼倍速播放 發布:2024-05-16 23:19:25 瀏覽:397
支付寶怎麼設置登陸密碼怎麼設置密碼 發布:2024-05-16 23:18:07 瀏覽:834
為什麼修改wifi密碼後無法加入 發布:2024-05-16 23:03:04 瀏覽:737
車機安卓未知來源在設置哪裡 發布:2024-05-16 22:31:48 瀏覽:794
紅包邀請驗證碼在哪裡填安卓手機 發布:2024-05-16 22:30:01 瀏覽:642
上傳日上限 發布:2024-05-16 22:26:08 瀏覽:859
c語言基本概念 發布:2024-05-16 21:44:16 瀏覽:190
sqlserver跨庫查詢 發布:2024-05-16 21:36:56 瀏覽:164
sql多表連接語句 發布:2024-05-16 21:21:53 瀏覽:301
sqlscope 發布:2024-05-16 21:17:37 瀏覽:966