2012-01-04 32 views
2

我正在構建一個iOS應用程序,其中包括將數據發送到PHP服務器。如何修復2個Web客戶端之間的字符串長度編碼?

我有重音字符的問題等,其從發送當字符串jeremyö中:

  • 的iOS是由PHP的var_dump檢測爲string(7) "jeremyö"
  • 從Firefox或鉻是由PHP的var_dump檢測(使用ASIHTTPRequest)作爲string(8) "jeremyö"

當用作登錄時,這打破了我所有的東西。

你對我如何解決此問題有任何提示嗎?我只知道UTF-8(Drupal 7後端),我不知道在iOS上使用的編碼,但我猜它是UTF-8或UTF-16。

感謝, 傑里米

回答

1

這聽起來更像是unicode的規範化,然後編碼。在unicode中,像ö這樣的字符可以用兩種方式表示。它可以是U+00F6(帶分隔符的小o)或者它可以是兩個字符:一個正常o和一個組合diaeresis(U + 0308)。

在iOS上有一些方法,如NSString的​​,decomposedStringWithCanonicalMapping等,它們允許你在這些不同的表示之間轉換字符串,在PHP中可能有類似的方法。

如果您正在使用這些字符串作爲查詢參數到你的數據庫,然後你的數據庫可能有什麼樣的控制字符串相等手段(MySQL的它的核對屬性)設置

+0

感謝這個解釋。不幸的是,我堅持支持PHP 5.2,它沒有Normalizer類http://php.net/manual/fr/normalizer.normalize.php – jchatard 2012-01-05 09:16:28

+0

你可能能夠在iPhone側進行規範化,並檢查你的數據庫整理設置 - 你可以完全避免PHP的問題 – 2012-01-05 09:25:16

+0

我曾嘗試在iOS端,但沒有運氣。我無法處理所有MySQL數據庫,因爲我的應用程序適用於所有Drupal用戶:-) – jchatard 2012-01-05 17:02:13