php系统函数socket_connect信息乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php系统函数socket_connect信息乱码相关的知识,希望对你有一定的参考价值。

a) 以下是socket_connect()函数底层返回的乱码信息:<br /><b>Warning</b>: socket_connect(): unable to connect [10061]: 锟斤拷锟斤拷目锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷芫锟斤拷锟斤拷薹锟斤拷锟斤拷印锟?in <b>E:\wamp64\www\ssq\com\entity\get_ssqResult.php</b> on line <b>68</b><br />报错信息如图
b) 以下是通过代码$errno = socket_last_error ();echo "socket_connect() failed, reason[" . $errno . "]:" . socket_strerror ($errno) . "\n";获取错误信息如下:socket_connect() failed, reason[10061]:由于目标计算机积极拒绝,无法连接。
a)和b)是同一种情况,都是我自己故意弄的连不上服务端的,我想知道为什么会出现a)和b)一种能正常获取报错信息,另一种则显示的是乱码,和这种情况如何解决?

你要连接的服务器没开通对应的端口,或者有防火墙屏蔽了追问

我就没开服务,这个我当然知道,我是想问为什么一个乱码,一个没乱码

追答

乱码就是编码的问题。两边编码不一致,或者页面编码和内容的实际编码不一致

//php指定页面内容的输出编码
header("Content-type:text/html;charset=utf-8");

追问

这个没用的,这两个错是同一个代码报出来的,先是socket_connect报的错(乱码),然后我用socket_strerror 获取socket_connect的错误信息(正常),

追答

我试了下,这个函数确实会返回乱码的错误,而且应该是不可逆的乱码。

只能调用的时候屏蔽错误,调用完根据返回结果再获取错误信息

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//用@屏蔽错误信息
$connected = @socket_connect($socket,'127.0.0.1',23);

if($connected)
    echo 'success';
else
    //用系统函数获取错误号及错误信息
    $errno = socket_last_error();
    
    //我本机电脑获取回来的错误信息是gb2312编码的
    //这里可以根据情况转换输出就不会乱码了
    echo 'error: '.$errno.':'. iconv('gb2312','utf-8',socket_strerror($errno));

追问

我现在也是暂时这么处理,只是我好奇想知道为什么会这样。是服务器的编码要配置呢,还是本来就是PHP代码的bug

追答

这个函数可能调用了系统底层的api,各种系统上表现会不一样,可能那个错误是从api上返回的,编码会依赖系统语言吧。这样处理是最好的

参考技术A 中文的转UTF8试试,传输时用htmlspecialchars_decode在转下码试试。追问

socket_connect报出来的错误直接就显示在页面上了,怎么转码,而且就没传输东西,你看问题没?

以上是关于php系统函数socket_connect信息乱码的主要内容,如果未能解决你的问题,请参考以下文章

PHP strftime()函数输出乱码问题

socket_connect没有超时

php增加用户时出现的【SQLSTATE[HY000] [2002]

PHP 从 Windows 机器上的套接字读取

PHP如何接收动态数据保存并实时显示到网页上?

php的GD库imagettftext函数解决中文乱码问题