ホームページ > バックエンド開発 > PHPチュートリアル > 文字化けしたPHPポストリクエストの問題

文字化けしたPHPポストリクエストの問題

WBOY
リリース: 2016-06-23 14:13:59
オリジナル
895 人が閲覧しました

PHP が文字化けする

以下のように最も原始的なテンプレートでポストリクエストのソースコードを使用します
	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 SMS 送信です オペレーターには urldecode がないため、パラメータの元のテキストリクエストしか考えられません。携帯電話に送信されたテキストメッセージが文字化けしています。文字化けの問題を解決する方法がないか、すぐに PHP に問い合わせました。
他の方法で http をリクエストすることはできますか?

ディスカッションへの返信 (解決策)

文字化けは、両側でエンコーディングが一致していないことが原因である可能性があります。たとえば、オペレーターの GBK エンコーディングが使用されており、ページが UTF8 エンコーディングを使用している場合に、ページをオペレーターのエンコーディングと一致させてみてください。

文字化けは、両側のエンコーディングが一致していないことが原因である可能性があります。たとえば、オペレーターのエンコーディングが GBK で、ページが UTF8 エンコーディングを使用している場合、ページをオペレーターのエンコーディングと一致させてみてください。
試してみましたが、やはり文字化けしてしまいます。


こちらに来てください

まず受信者にエンコード要件について尋ねてから、必要に応じてエンコードしてください

エンコードは GB2312 であると言われました。 gb2312 への送信結果は依然として文字化けしています。


まず受信者にエンコード要件について尋ね、必要に応じてエンコードします。

エンコードは GB2312 であると言われましたが、送信結果は依然として文字化けします。

あなたが送ったキャラクターのアイコンvを作成してください

私はただあなたのアバターを見ているだけです、私の心は空っぽです

重要なのは、あなたが送ったデータが単に文字セットを変更するだけではなく、gbkであるということです

私はただ見ているだけですあなたのアバターを見て、私の心は空っぽです

重要なのは、送信したデータが gbk であるということであり、単に文字セットを変更するだけではありません
ははは、集中する必要があります
上記のコードをどのように gbk に処理すべきか

それは何も関係ありません上記のコードではパラメータを渡す前に変換する必要があります

上記のコードとは関係ありません、パラメータを渡す前に変換する必要があります

アドバイスありがとうございます。出来た。


素晴らしいツイスト

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート