我有一個小的php-snippet,當通過AJAX調用時,返回一些來自數據庫的條目 - 標準東西,真的。然而,最近我意識到有一個問題:Unicode編碼在URL和數據庫之間的某處失敗
有兩種可能的情形:
- 的片段被稱爲在有些事情是創建或數據庫
- 的片段被稱爲更新這樣的方式這樣返回的信息就按照php回顯的HTML
現在,當要求片段更新某些東西時,必須提供一個字符串。如果這個字符串包含一些奇怪的字符,說σ
,打破的東西一點點:某處發送請求和接收數據庫查詢中的JavaScript之間
,西格瑪變得面目全非。我想這是因爲URI是一個URI而不是花哨的IRI。如果是這樣,我該如何解決這個問題?如果有幫助,西格瑪變成
σ
。出於測試目的,我試圖直接通過數據庫接口輸入西格瑪 - 工作正常。西格瑪看起來應該如此,但只能從的phpmyadmin GUI! 一旦我從php-snippet請求這個工作西格瑪,我收到
?
。
我可以理解它是如何的問題通過URI推西格瑪,但我不明白爲什麼PHP不能正確處理在第二個項目符號點要求西格瑪 - 我敢發誓,PHP支持utf8_general_ci
,這是數據庫的排序規則。
所以,我的問題:
- 怎能我奇怪的編碼的字符,如
σ
使編碼的UTI的目的時,它不是肢解? - 我該如何讓PHP不會將sigma壓縮到問號?
注:我通常對URL/URI/IRI等術語使用哪些術語感到困惑 - 我不一定在該領域受過教育。請原諒任何屠殺的縮寫。
附錄:將數據傳遞到php-snippet到推入數據庫的數據是用encodeURIComponent()
編碼的。
更新:我已經收窄的問題在以下方式:JavaScript的傳遞正確的字符到PHP,但PHP本身傳遞不正確的字符到數據庫。由於PHP本身應該能夠處理字符,我有以下問題:是否有可能PHP無法維持在mysql_query()
內的編碼?
更多信息:不正確地通過σ
,這是記錄在數據庫中,將保持這種形式,當我要求它返回到PHP。
此外,由於PHP使用$_GET[]
從URL中獲取字符串,這個函數是否有可能干擾編碼?
最終加入:這是php文件本身這就是問題所在!當我加入echo 'σ';
時,我得到了σ
的回報。在我看來,那麼,我的PHP文件,由於某種原因,在UTF8編碼不,我不知道如何來調整?
OK,從頭開始,這是完全錯誤的。我已經得到了php的輸出,即HTML,看起來是正確的,但即使如此,php通過查詢傳遞給數據庫也是錯誤的。編碼在查詢時會失敗嗎?
你數據通過JS傳遞給數據庫時有問題,還是數據從數據庫傳出? – Xfile 2012-03-30 10:02:34
這兩者在某種程度上都是這樣的:當數據正確(σ')從數據庫傳輸到用戶時,字符變爲'?',當數據從JS傳到數據庫時,字符就變成了'ó''。 – tesc 2012-03-30 10:04:04