2012-03-30 27 views
1

我有一個小的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通過查詢傳遞給數據庫也是錯誤的。編碼在查詢時會失敗嗎?

+0

你數據通過JS傳遞給數據庫時有問題,還是數據從數據庫傳出? – Xfile 2012-03-30 10:02:34

+0

這兩者在某種程度上都是這樣的:當數據正確(σ')從數據庫傳輸到用戶時,字符變爲'?',當數據從JS傳到數據庫時,字符就變成了'ó''。 – tesc 2012-03-30 10:04:04

回答

0

反正縮短了,也許你通過JS發佈數據之前,DB,所以現在嘗試插入和更新實驗你會發現這個有用的..

encodeURIComponent方法(您的文章VAR)

+0

我應該提到在OP中 - 通過JS發送的數據是以這種方式編碼的。我會更新OP posthaste。 – tesc 2012-03-30 10:07:57

+0

好吧,那麼我會(最後)建議將您的數據庫表設置爲 - > utf8_bin。在這些時尚中,它對我一切都很好。當然你在DB中看到的並不重要,通過乾淨的mysql查詢和php echo它應該可以做得很好。 – Xfile 2012-03-30 10:13:20

+0

經過測試,似乎沒有區別!然而,我已經解決了這個問題。問題在於php與數據庫溝通。 OP相應更新。 – tesc 2012-03-30 10:17:22