現象
- PHP 回傳 `echo "success";`
- Android 端讀取輸入流轉字串,結果為 **`.success`** (前綴一個點/不可見字元)。
- 複製該字串發現隱藏字元 (可能為 UTF-8 BOM `EF BB BF` 或空白/換行)。
根本原因
**PHP 腳本在 `` 後有多餘輸出**:
- 檔案儲存為 **UTF-8 with BOM** (Notepad 預設)。
- `
- 錯誤/警告訊息輸出至標準輸出 (未關閉 `display_errors`)。
解決方法
- 儲存為 UTF-8 無 BOM:VS Code / Notepad++ / PhpStorm → Encoding → UTF-8 (without BOM)。
- 純 PHP 檔案省略結束標籤 `?>`** (官方推薦),避免尾部換行被輸出。
- 入口檔案最開頭 `
- 關閉錯誤顯示** (生產環境):
ini_set('display_errors', 0); error_reporting(E_ALL);
- 輸出前清空緩衝區** (應急):
ob_clean(); echo "success";
Android 端防禦性處理
String response = new String(bytes, "UTF-8").trim(); // 移除首尾空白/不可見字元
if (response.equals("success")) { ... }
核心原則:**PHP 只輸出純資料 (JSON/純文字),任何診斷資訊走日誌系統,勿混入回應體。**