php打印双斜杠而不是1

时间:2018-08-25 08:41:08

标签: php string

我从config.ini中读取了一个字符串 字符串是

config.ini
[section]
param = "#1234\y"

然后,当我阅读此代码并将其打印在日志中或尝试将其发送到服务器或套接字时,将打印以下内容:

#1234\\y

如何确定我只会发送一个反斜杠

当我从不带\ y的配置中获取信息时也是如此。并尝试通过php像$ x串联起来。'\ y'是相同的,无法正常工作。

仅当我使用字符串而不是通过配置定义变量时,它才起作用

我的udp服务器我需要发送字符串

    //Send the message to the server
    if( ! socket_sendto($sock, $newstr , strlen($newstr) , 0 , $ip , $port))
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
        throw new Exception("Could not send data: $errorcode $errormsg \n");
    }

3 个答案:

答案 0 :(得分:0)

由于您正在读取配置文件,因此还可以在值定义周围使用单引号。

param = ‘#1234\y’

这将确保反斜杠不会转义。有关信息,请查看this great post

如果从脚本中读取内容,则可以使用PHP方法“ stripslashes”来使用var。

stripslashes($param)

PHP manual

  

返回一个反斜杠被去除的字符串。 (\'变成'等等   on。)将两个反斜杠(\)制成一个反斜杠()。

答案 1 :(得分:0)

问题被错误地转义了输入-没有错误地转义了输出

或者尝试使用parse_ini_file ($filename, true, INI_SCANNER_RAW);来禁用解析,这将导致不转义反斜杠-或将INI更改为param = '#1234\y'

在无法修复字符串输入的情况下,以下是修复输出字符串的方法(最糟糕的解决方案):

$newstr = str_replace('\\\\', '\\', $mystr);

$newstr = preg_replace('/\\\\/', '\\', $mystr);

答案 2 :(得分:0)

默认情况下,当您在服务器上发送一些数据时,它将被编码,要解密另一侧的数据,您必须使用php urldecode()函数作为

echo urldecode("#1234\\y");// output:#1234\y