① 為什麼php中用了urlencode處理字元串後,瀏覽器自動又轉了回來
有兩中解決辦法:
1.文件編碼改為ansi類型的,
2.文件類型還是為utf-8的,
$bdc_music_title_encode=urlencode($bdc_music_title_encode);
改為:
$bdc_music_title_encode=iconv('utf-8','gbk',$bdc_music_title_encode);
$bdc_music_title_encode=urlencode($bdc_music_title_encode);
② PHP函數urlencode和urldecode的問題。
很明顯,這個編碼函數有另外一個參數。就是指定編碼方式的。
如果你安裝utf-8編碼進行編碼的話,就和原來的不一樣。
當你換成gb2312的時候就一樣了。
因為選擇的默認編碼方式不同,所以會出現不同的結果。
③ php中urldecode()和urlencode()起什麼作用啊
urlencode()編碼:對字元串中除了 -_. 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼為加號(+)。
urldecode()解碼:還原 URL 編碼字元串。
示例:
<?php
header("Content-Type:text/html; charset=utf-8");
//對參數值進行編碼
$parm=urlencode("演示php-mysql");
//拼接url
$url="decode.php?par=".$parm;
?>
<a href="<?php echo $url;?>">urlencode演示</a>
點擊連接後地址欄中漢字被編碼了:
http://localhost/decode.php?par=%E6%BC%94%E7%A4%BAphp-mysql
------------------------------------------------------------------------
//decode.php
<?php
//獲取參數值
$parValue=$_GET['par'];
//解碼
echo urldecode($parValue);
//運行結果:演示php-mysql
?>
④ php 編碼轉換
URLEncode:是指針對網頁url中的中文字元的一種編碼轉化方式,最常見的就是Bai、Google等搜索引擎中輸入中文查詢時候,生成經過Encode過的網頁URL。
URLEncode的方式一般有兩種,一種是傳統的基於GB2312的Encode(Bai、Yisou等使用),另一種是基於UTF-8的Encode(Google、Yahoo等使用)。
本工具分別實現兩種方式的Encode與Decode:
中文
->
GB2312的Encode
->
%D6%D0%CE%C4
中文
->
UTF-8的Encode
->
%E4%B8%AD%E6%96%87
我們可以用以下代碼實現轉換:
<?php
echo
urlencode('測試');?>
如果是gb2312編碼,轉換的結果為"%B2%E2%CA%D4";
如果是utf-8編碼,轉換的結果為"%E6%B5%8B%E8%AF%95";
希望我的回答你能滿意啊!呵呵!
⑤ php gb2312轉換UTF-8編碼
<?php
header("Content-Type:text/html; charset=GB2312");//定義頁面編碼方式gb2312
echo urlencode("網路");//gb2312編碼的
echo "<br>";//換行
echo urlencode(iconv('GB2312', 'UTF-8', '網路'));//utf-8編碼的
echo "<br>";
echo urlencode("網路");//還是gb2312編碼的
?>
規定好,頁面編碼後,頁面編碼就是統一不會再改變。
iconv 、mb_convert_encoding 這些函數改變的只是傳入那一個字元串的編碼。
而不是頁面編碼,別搞混了。
header("Content-Type:text/html; charset=GB2312");
才是規定頁面編碼的代碼。
⑥ php中輸出字元串的utf-8編碼
比如輸入「呵」,輸出%E5%91%B5
這個是urlencode的...
⑦ PHP的。UTF-8編碼的網頁下面,如何將urlencode轉成GB2312編碼的
echo urlencode(iconv('utf-8', 'gb2312', '中國人'));
先把 中國人 編碼轉成 gb2312,然後再urlencode編碼一次
⑧ php頁面解決亂碼問題
1、文件編碼:指的是頁面文件(.html,.php等)本身是以何種編碼來保存的。記事本和Dreamweaver在打開頁面時候會自動識別文件編碼因而不太會出問題。而ZendStudio卻不會自動識別編碼,它只會根據首選項的配置固定以某種編碼打開文件,如果工作時候一不注意,用錯誤編碼打開文件,做了修改之後一保存,亂碼就出現了(我深有體會)。
2、頁面申明編碼:在HTML代碼HEAD裡面,可以用<meta http-equiv="Content-Type" content="text/html; charset="XXX" />來告訴瀏覽器網頁採用了什麼編碼,目前中文網站開發中XXX主要用的是GB2312和UTF-8兩種編碼。
3、資料庫連接編碼:指的是進行資料庫操作時候以哪種編碼與資料庫傳輸數據,這里需要注意的是不要與資料庫本身的編碼混淆,比如MySQL內部默認是latin1編碼,也就是說Mysql是以latin1編碼來存儲數據,以其他編碼傳輸給Mysql的數據會被轉換成latin1編碼。
知道了WEB開發中哪些地方涉及到了編碼,也就知道了PHP頁面亂碼產生的原因:上述3項編碼設置不一致,由於各種編碼絕大部分是兼容ASCII的,所以英文符號不會出現,中文就倒霉了。下面是一些常見的錯誤情況與解決:
1、資料庫採用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產生亂碼的原因。這時候在PHP腳本裡面直接SELECT數據出來的就是PHP頁面亂碼,需要在查詢前先使用:
mysql_query("SET NAMES GBK"); 來設定MYSQL連接編碼,保證頁面申明編碼與這里設定的連接編碼一致(GBK是GB2312的擴展)。如果頁面是UTF-8編碼的話,可以用:
mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與資料庫內部編碼一致可以不設定連接編碼。
註:事實上MYSQL的數據輸入輸出比上面講的更復雜一些,MYSQL配置文件my.ini中定義了2個默認編碼,分別是[client]里的default-character-set和[mysqld]里的default-character-set來分別設定默認時候客戶端連接和資料庫內部所採用的編碼。我們上面指定的編碼其實是MYSQL客戶端連接伺服器時候的命令行參數character_set_client,來告訴MYSQL伺服器接受到的客戶端數據是什麼編碼的,而不是採用默認編碼。
2、頁面申明編碼與文件本身編碼不一致,這種情況很少發生,因為如果編碼不一致美工做頁面時候在瀏覽器看到的就是亂碼了。更多時候是發布以後修改一些小BUG,以錯誤編碼打開頁面然後保存導致的。或者是用某些FTP軟體直接在線修改文件,比如CuteFTP,由於軟體編碼配置錯誤而導致轉換錯了編碼。
3、一些租用虛擬主機的朋友,明明上述3項編碼都設置正確了還是有PHP頁面亂碼。比方說網頁是GB2312編碼的,IE等瀏覽器打開卻總是識別成UTF-8,網頁HEAD裡面已經申明是GB2312了,手動修改瀏覽器編碼為GB2312後頁面顯示正常。產生原因是伺服器Apache設定了伺服器全局的默認編碼,在httpd.conf裡面加了AddDefaultCharset UTF-8。這時候伺服器會首先發送HTTP頭給瀏覽器,其優先順序比頁面里申明編碼高,自然瀏覽器就識別錯了。解決辦法有2個,請管理員在配置文件自己的虛機里加上一條AddDefaultCharset GB2312來覆蓋全局配置,或者在自己目錄的.htaccess里配置。
⑨ PHP系統UTF-8編碼在IIS下rewrite中文怎麼處理
這個實際是兩個問題:一個是web server的rewrite。一個是對於pathinfo中漢字的處理問題。
先說第一個:如果你用的是apache,那添加以下配置就可以了
RewriteRule ^/tag/([^\?]*) /e/sch/index.php?keyword=$1 [L,NC]
作用是偽靜態
第二個需要你的php進行編碼識別處理。apache收到的請求里,url永遠不會是你希望的漢字,而是瀏覽器根據自己的規則進行了urlencode的結果,但究竟是使用utf8還是gbk進行urlencode,不同的瀏覽器策略不同。url的不同位置(pathinfo和query_string)也不同。如果你希望能夠取到正確的漢字,自己在php里進行編碼識別和轉換吧
⑩ php urlencode點擊按鈕gb2312/utf-8 解碼
先將gbk轉utf8再編碼,解碼後再將utf8轉gbk