2013-12-21 85 views
0

那么标题总结了它。如果我这样做:PHP - 逃逸反斜杠不起作用

fwrite($handle, 'test\r\ntest'); 

我得到写入文件litreally。即:

test\r\ntest 

它不适用于echo或任何其他函数操纵字符串。

当我需要使用ESC/POS写入串口打印机时,这成为一个问题。如果我使用PHP,它会打印一大堆问题和法语字符。与Python(加pyserial),使用下面的代码,工作得:

from __future__ import print_function 
import serial 

ser = serial.Serial('COM4'); 

ser.write('\x1b\x40'); 
ser.write('\x0a'); 
ser.write('\x0a'); 
ser.write('Hello there'); 
ser.write('\x0a'); 
ser.write('\x1d\x56\x42\x03'); 

我的系统: WAMP 2.4(PHP 5.4.16,阿帕奇2.4.4)上的Windows 7家庭普通版64位

回答

5

对于反斜杠标志逃避,你需要使用双引号的字符串,而不是单引号那些特殊字符,请尝试以下:

fwrite($handle, 'test\r\ntest'); // not working 
fwrite($handle, "test\r\ntest"); // works as expected 

这可能是值得指出的是,这个问题可能已经完全跳过,如果你的数据从另一个源(非PHP文件,网页形式)来了,只有当你硬编码脚本文件里面的绳子,会发生。欲知详情,请随时浏览相关手册页:

http://www.php.net/manual/en/language.types.string.php

2

尝试使用"代替'这些转义序列:

fwrite($handle, "test\r\ntest"); 
4

使用单引号将字面上写你的字符串。 要使用转义字符,你需要使用双引号来代替:

echo "This output will \n expand"; 

http://www.php.net/manual/en/language.types.string.php

+0

我意识到,报价是错误的,谢谢。这意味着问题不存在,因为它仍然不能正确写入串口(与python不同)。 – Nahuel