私のphpはソケットを介してサーバーからデータを受信します。長さはサーバーから送信されたバイト数と同じですが、htmlentitiesを通じて出力するのは不完全です。 Web ページですか? 結果を返すためにクエリが送信されるたびに、出力情報は常に減少します。たとえば、最初に 1,000 バイト以上減少しても、次は 2,000 バイト減少する可能性があります。この問題を解決するには?設定に問題がありますか?
ディスカッションに返信 (解決策)
どうすればよいですか?誰かがそのような無知な質問に答えますか?
php ウェブページは、HTML ウェブページのフォームを通じて php コードにポストし、サーバーが情報を受信した後、大量のデータ、バイナリ、およびデータを生成します。それを php クライアントに送信します。php クライアントはデータを受け取ります。データを受信した後、PHP は strlen を呼び出してメッセージ本文の長さがサーバーから送信されたパケットの長さと同じであることをテストし、表示します。これは、apche の Web サーバーを使用しているため、xampp の環境で正常に受信されていることがわかりました。 php-fpm で出力された情報が不完全であることを確認しました。現状何が起こっているのかわかりません。
ただし、フォームによって渡される値が Web ページによって制限されるほど大きくすることはできません。各ステップの結果を出力し、特殊文字が解析されているかどうかを確認してください。
echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."
PHPはデータを受信した後、メッセージ本文の長さをテストするためにstrlenを呼び出したので、サーバーが送信するパケットの長さと同じです
両方のサーバー環境で長さが同じですか?
はい、3 つのサーバーはすべてこのようになっています。設定の問題なのか、それとも別の場所にあるのか、今すぐ解決するのは簡単ではありません。
データがそれほど長くない場合 その場合、理由を分析できるように、データの Base64 エンコードを投稿できます
これは XML 文字列ですが、すべて ですが、中国語は GBK でエンコードされています (少なくとも指定したこの部分は)
確認する必要があります出力時の処理コード
私はそれを処理します わかりました...笑 次のように:
$recv_res = iconv("gbk", "utf-8", $recv_res); そして、エコーするときに、 echo htmlentities($ data[$i],ENT_NOQUOTES,"utf -8")." 出力されるバイト数を制限する場所があるのだろうか...
考えるのを手伝ってもらえますかもう一度ありがとうございます...
誰かアドバイスをいただけますか? $recv_res = iconv("gbk", "utf-8", $recv_res); ?
メンバーの 1 つが utf-8 の場合はどうなりますか?それは混乱ではないでしょうか?
コードを投稿してください
でも、apache+php+mysql 環境では普通に出力できますし、データ量も減って完全には出力できないと思います。文字コードの問題とソースの書き込み データ送信時に文字コードがgbkと指定されているのですが 受信時も同じはずです
理由がわかる方いらっしゃいますかどなたか教えていただけませんか
Nginx を使用している場合は、Nginx がリバース プロキシをオンにして、リバース プロキシの tmp ディレクトリ キャッシュにアクセス許可がない、またはキャッシュが小さすぎる原因となっているかどうかを確認できます。