热搜:NVER node 开发 php

php post请求乱码的问题

2024-09-16 12:15:02
php post请求乱码的问题

PHP 乱码

使用最土模板里的post请求源码如下
	static public function DoPost($url,$post_data=array()){		$url2 = parse_url($url);		$url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]);		$url2["port"] = ($url2["port"] == "" ? 80 : $url2["port"]);		$host_ip = @gethostbyname($url2["host"]);		$fsock_timeout = 2; //2 second		if(($fsock = fsockopen($host_ip, $url2['port'], $errno, $errstr, $fsock_timeout)) < 0){			return false;		}		$request =  $url2["path"].($url2["query"] ? "?" . $url2["query"] : "");		$post_data2 = http_build_query($post_data);		$post_data2=urldecode($post_data2);		$in  = "POST " . $request . " HTTP/1.0\r\n";		$in .= "Accept: */*\r\n";		$in .= "Host: " . $url2["host"] . "\r\n";		$in .= "User-Agent: Lowell-Agent\r\n";		$in .= "Content-type: application/x-www-form-urlencoded\r\n";		$in .= "Content-Length: " . strlen($post_data2) . "\r\n";		$in .= "Connection: Close\r\n\r\n";		$in .= $post_data2 . "\r\n\r\n";		unset($post_data2);		if(!@fwrite($fsock, $in, strlen($in))){			fclose($fsock);			return false;		}		return self::GetHttpContent($fsock);	}	static private function GetHttpContent($fsock=null) {		$out = null;		while($buff = @fgets($fsock, 2048)){			$out .= $buff;		}		fclose($fsock);		$pos = strpos($out, "\r\n\r\n");		$head = substr($out, 0, $pos);    //http head		$status = substr($head, 0, strpos($head, "\r\n"));    //http status line		$body = substr($out, $pos + 4, strlen($out) - ($pos + 4));//page body		if(preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/", $status, $matches)){			if(intval($matches[1]) / 100 == 2){				return $body;  			}else{				return false;			}		}else{			return false;		}	}

实现的是http短信发送 因为运营商没有urldecode 我这里只能想到参数原文字请求 发送到手机的短信是乱码的本人接触php也不久 想请教下各位 有没有什么办法 能解决乱码问题。
可不可以通过其他方式请求http。

回复讨论(解决方案)

乱码可能导致原因是两边编码不一致,比如运营商那里是GBK编码,你页面用了UTF8编码,你把你的页面和运营商的保持一致试试。

乱码可能导致原因是两边编码不一致,比如运营商那里是GBK编码,你页面用了UTF8编码,你把你的页面和运营商的保持一致试试。
试过了还是乱码。


来人啊

先问清楚接受方的编码需求 然后根据需要编码.

先问清楚接受方的编码需求 然后根据需要编码.
他们说编码是GB2312 我把页面的charset设置gb2312了 发送结果还是乱码。


先问清楚接受方的编码需求 然后根据需要编码.
他们说编码是GB2312 我把页面的charset设置gb2312了 发送结果还是乱码。

发送的字符做一个iconv

光顾着看你的头像了,脑子空空的

关键是你发送过去的数据是gbk,不是改charset就行的

光顾着看你的头像了,脑子空空的

关键是你发送过去的数据是gbk,不是改charset就行的
哈哈 要专注啊
上面的代码该怎么处理能处理成gbk呢

跟上面的代码无关,传参前就要转换

跟上面的代码无关,传参前就要转换
多谢大侠指点。 成功了。

好牛B的麻花