PHP对HTML编码字符串的处理
????????今天在寫一個PHP腳本訪問數據庫時,發現其中的中文字符串使用了HTML編碼方式進行存儲的(比如中文字“毛”對應的HTML編碼為“毛”),使得在對該字段進行條件查詢時不能進接使用中文進行查詢,而要將其轉換為編碼后再進行條件匹配。
??????? PHP中對可讀性字符與HTML編碼字符相互轉換時需要使用到htmlentities和html_entity_decode函數。于是寫出如下查詢語句,
????$sql?=?"select?id,depart_name,first_name,last_name,local_name,extension,mobile,title ";????$sql.=?"from?pb_extension?e,?pb_department?d? ";
????$sql.=?"where?e.depart_id?=?d.depart_id? ";
????$sql.=?"??and?d.plant='".$plant."' ";
????$sql.=?"?and?(first_name?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?"?or?last_name?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?"?or?local_name?like?'%".htmlentities($HTTP_POST_VARS["q"])."%'";
????$sql.=?"?or?extension?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?"?or?mobile?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?"?or?depart_name?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?"?or?title?like?'%".$HTTP_POST_VARS["q"]."%'";
????$sql.=?")? ";
并執行。可是怪是卻發生了,此語句在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?&?<Frau>?&?Krämer";
??$original?=?strtr($encoded,?$trans);
??echo?$original;
?>
執行這段代碼,輸出的$original變量值為“Hallo & <Frau> & Kr?mer”,這正是我想要的結果。
??????? 以上是我在工作中遇到的問題及解決方法,特將其寫在我的Blog上,與那些遇到和我相似問題的朋友們一起分享。
總結
以上是生活随笔為你收集整理的PHP对HTML编码字符串的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SETP7 Basic V11 SP1
- 下一篇: 1.FHS(Filesystem Hie