今天在寫乙個php指令碼訪問資料庫時,發現其中的中文字串使用了html編碼方式進行儲存的(比如中文字「毛」對應的html編碼為「毛」),使得在對該字段進行條件查詢時不能進接使用中文進行查詢,而要將其轉換為編碼後再進行條件匹配。
php中對可讀性字元與html編碼字元相互轉換時需要使用到htmlentities和html_entity_decode函式。於是寫出如下查詢語句,
並執行。可是怪是卻發生了,此語句在sql analyzer中可以正確執行並查詢出結果,而在ie中很執行這段指令碼卻提示查詢結果為零,這是為什麼呢?
經過仔細檢查這段sql,並檢視在ie中的原始碼,發現了問題的根結所在。查詢值經htmlentities函式後轉換為html編碼,此編碼中存在著特殊字元&(如第一段中的舉例),在ie中這個字元是另有含義的。在ie中一般都是使用「&」來表示這個符號的,導致在ie中看到輸出的sql語句和真正執行的語句是不一樣的。
要解決這個問題就要想個辦法不讓ie使用「&」表示「&」符號。經過一翻查詢,發現使用如下**可以解決這個問題。
<?
php$trans
=get_html_translation_table
(html_entities);
$trans
=array_flip
($trans
);$encoded="
hallo & & krämer";
$original
=strtr
($encoded
,$trans
);echo
$original
;?>
執行這段**,輸出的$original變數值為「hallo & & krämer」,這正是我想要的結果。
以上是我在工作中遇到的問題及解決方法,特將其寫在我的blog上,與那些遇到和我相似問題的朋友們一起分享。
PHP對HTML編碼字串的處理
今天在寫乙個php指令碼訪問資料庫時,發現其中的中文字串使用了html編碼方式進行儲存的 比如中文字 毛 對應的html編碼為 毛 使得在對該字段進行條件查詢時不能進接使用中文進行查詢,而要將其轉換為編碼後再進行條件匹配。php中對可讀性字元與html編碼字元相互轉換時需要使用到htmlentiti...
PHP對HTML編碼字串的處理
今天在寫乙個php指令碼訪問資料庫時,發現其中的中文字串使用了html編碼方式進行儲存的 比如中文字 毛 對應的html編碼為 毛 使得在對該字段進行條件查詢時不能進接使用中文進行查詢,而要將其轉換為編碼後再進行條件匹配。php中對可讀性字元與html編碼字元相互轉換時需要使用到htmlentiti...
openjudge 編碼字串
總時間限制 1000ms 記憶體限制 65536kb 描述在資料壓縮中,乙個常用的方法是行程長度編碼壓縮。對於乙個待壓縮的字串,我們可以依次記錄每個字元及重複的次數。例如,待壓縮的字串為 aaabbbbcbb 壓縮結果為 a,3 b,4 c,1 b,2 這種壓縮對於相鄰資料重複較多的情況有效,如果重...