php 8.3 发送 iso 编码 post 请求需手动控制请求体编码与 content-type 头声明,避免自动 utf-8 转码导致乱码;应使用 php://input 获取原始字节并显式指定 charset,禁用 curlopt_postfields 数组方式。

PHP 8.3 可以发送 ISO 编码的 POST 请求,但不能直接“发 ISO”——关键在于明确控制请求体编码和请求头声明,否则服务端大概率按 UTF-8 解析,导致乱码。
确保 POST 数据本身是 ISO 编码(如 ISO-8859-1)
PHP 默认字符串是字节流,不自动转码。若原始数据来自 ISO 编码的表单或文件,需保持其原始字节不变:
- 读取时避免用
mb_convert_encoding()或iconv()错误转成 UTF-8 - 若数据来自 HTML 表单,确认该页面声明了
<meta charset="ISO-8859-1">ï¼ä¸æµè§å¨å®é ææ¤ç¼ç æäº¤ - ç¨
file_get_contents('php://input')è·ååå§ POST ä½ï¼å®ä¸ä¼åä»»ä½ç¼ç 转æ¢ï¼æ¿å°çå°±æ¯å®¢æ·ç«¯åæ¥çåå§åè
æ¾å¼è®¾ç½® Content-Type 并声æ charset
cURL ä¸ä¼èªå¨æ ¹æ®å å®¹æ¨æå符éï¼å¿ é¡»æå¨å 头ï¼
- åéè¡¨åæ°æ®ï¼ç¨
http_build_query()æ¼æ¥åï¼è®¾è¯·æ±å¤´Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1 - åéåå§ ISO å符串ï¼å¦ä»æä»¶è¯»å
¥ï¼ï¼è®¾
Content-Type: text/plain; charset=ISO-8859-1æç®æ æ¥å£è¦æ±çç±»å - åå¿ä¾èµ
CURLOPT_POSTFIELDSæ°ç»æ¹å¼ââå®ä¼å¼ºå¶æ UTF-8 å¤çé®å/å¼ï¼ç ´å ISO åè
æå¡ç«¯æ¥æ¶æ¹å¿ é¡»å¹é å¤çé»è¾
PHP 8.3 ç $_POST å§ç»æ application/x-www-form-urlencoded çé»è®¤è§åè§£æï¼RFC 1867ï¼ï¼è该è§èæªå¼ºå¶æå® charsetï¼å¤æ° PHP ç¯å¢é»è®¤æ UTF-8 è§£ç ãæä»¥ï¼
- ä¸è¦ææ
$_POST['name']è½æ£ç¡®æ¾ç¤º ISO å 容ââå®å¾å¯è½å·²æå - åºæ¹ç¨
file_get_contents('php://input')è·ååå§åèï¼åç¨mb_convert_encoding($raw, 'UTF-8', 'ISO-8859-1')æå¨è½¬ç ï¼å¦æç®æ æ¯ UTF-8 åå¨ï¼ - è¥æå¡ç«¯ä¹ç¨ ISO å¤çï¼è·³è¿è½¬ç ï¼ç´æ¥ä½¿ç¨åå§åèå³å¯
注æ PHP 8.3 çä¸¥æ ¼æ§
PHP 8.3 å¯¹è¶ å ¨å±åéåè¾å ¥è§£ææ´ææï¼
-
filter_input(INPUT_POST, ...)åæ ·åºäº$_POSTï¼ä¸è§£å³ç¼ç é®é¢ - å¯ç¨
default_charset = "UTF-8"ï¼php.ini é»è®¤ï¼ä¼å½±åè¾åºï¼ä½ä¸å½±åè¾å ¥è§£æé»è¾ - è¥ç¨ cURL åéï¼ç¡®ä¿æ²¡å¼å¯
CURLOPT_ENCODINGï¼å®åªå½±åååºè§£å缩ï¼ä¸è¯·æ±ç¼ç æ å ³ï¼
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











