The spelling is "ASCII". Abbreviation for "American Standard Code for Information Interchange", which is "American Standard Code for Information Exchange".
In principle there is nothing to convert. The most common encodings, whether ISO-8859-1, WIN-1252, or even UTF-8, use the ASCII table as the basis.
ASCII are the characters from 0 to 127, according to the following table:
Caracteres "imprimíveis"
=======================================
Dec Hex Bin Caractere
------ ----- ----------- --------------
32 20 00100000 Espaço
33 21 00100001 !
34 22 00100010 "
35 23 00100011 #
36 24 00100100 $
37 25 00100101 %
38 26 00100110 &
39 27 00100111 '
40 28 00101000 (
41 29 00101001 )
42 2A 00101010 *
43 2B 00101011 +
44 2C 00101100 ,
45 2D 00101101 -
46 2E 00101110 .
47 2F 00101111 /
48 30 00110000 0
49 31 00110001 1
50 32 00110010 2
51 33 00110011 3
52 34 00110100 4
53 35 00110101 5
54 36 00110110 6
55 37 00110111 7
56 38 00111000 8
57 39 00111001 9
58 3A 00111010 :
59 3B 00111011 ;
60 3C 00111100 <
61 3D 00111101 =
62 3E 00111110 >
63 3F 00111111 ?
64 40 01000000 @
65 41 01000001 A
66 42 01000010 B
67 43 01000011 C
68 44 01000100 D
69 45 01000101 E
70 46 01000110 F
71 47 01000111 G
72 48 01001000 H
73 49 01001001 I
74 4A 01001010 J
75 4B 01001011 K
76 4C 01001100 L
77 4D 01001101 M
78 4E 01001110 N
79 4F 01001111 O
80 50 01010000 P
81 51 01010001 Q
82 52 01010010 R
83 53 01010011 S
84 54 01010100 T
85 55 01010101 U
86 56 01010110 V
87 57 01010111 W
88 58 01011000 X
89 59 01011001 Y
90 5A 01011010 Z
91 5B 01011011 [
92 5C 01011100 \
93 5D 01011101 ]
94 5E 01011110 ^
95 5F 01011111 _
96 60 01100000 `
97 61 01100001 a
98 62 01100010 b
99 63 01100011 c
100 64 01100100 d
101 65 01100101 e
102 66 01100110 f
103 67 01100111 g
104 68 01101000 h
105 69 01101001 i
106 6A 01101010 j
107 6B 01101011 k
108 6C 01101100 l
109 6D 01101101 m
110 6E 01101110 n
111 6F 01101111 o
112 70 01110000 p
113 71 01110001 q
114 72 01110010 r
115 73 01110011 s
116 74 01110100 t
117 75 01110101 u
118 76 01110110 v
119 77 01110111 w
120 78 01111000 x
121 79 01111001 y
122 7A 01111010 z
123 7B 01111011 {
124 7C 01111100 |
125 7D 01111101 }
126 7E 01111110 ~
127 7F 01111111 DEL
And this:
Caracteres de controle
=======================================
Dec Hex Bin Caractere
------ ----- ----------- --------------
10 0A 00001010 avanço de linha
13 0D 00001101 retorno de carro
26 1A 00011010 SUB
(tem outros, que nao vem ao caso agora)
Just you filter the string so as to eliminate accents and special characters, so as not to have any outside of the above table. How to do, it just depends on the way you are generating each line.
To insert the characters 0x0D
, 0x0A
in PHP just that:
$quebra = chr( 0x0D ) . chr( 0x0A );
$final = chr( 0x1A );
PS: as already mentioned, you can use " r n", but it gives exactly the same, see in IDEONE.
Then you’ll be doing line by line:
$arquivo .= $linha . $quebra;
and in the end
$arquivo .= $final;
Example taken from actual bank remittance, but with its 0x1A added (in the original did not need it, and I separated the variables to illustrate):
$quebra = chr( 0x0D ) . chr( 0x0A );
$final = chr( 0x1A );
$cRemessa := ''
... pulei a maior parte das linhas, mas só muda o conteudo ...
$cRemessa .= '1040001300021R 01000000000000000000000000000000000000000000000000204042018000000000000200 ' + $quebra;
$cRemessa .= '10400015 000023000007000000000009002100000000000000000000000000000000000000000000000 ' + $quebra;
$cRemessa .= '10499999 000001000025 ' + $quebra;
$cRemessa .= $final;
Remember to scroll to the end on the right, because the string has many white spaces.
I’m using the PHP_EOL constant, it doesn’t put the characters Chr( 0x0A ) + Chr( 0x0D )? and fclose() the Chr( 0x1A ) was reading the php documentation and she understands that. Can you tell me if you do this or not? Is there any way to view this in the file to debug? But anyway I will test this way you said, because when transmitting to the bank the program is accusing that has an extra character in the line and so I created the topic, I thought that would be related to file encoding
– Leandro Silva Campos
PHP_EOL depends on the system. It should not be used for this application label, which has specification. Fclose just closes the file, it wouldn’t make sense for him to add arbitrary characters. The content of a file is 100% the responsibility of the programmer, you decide what goes in it.
– Bacco
By the way, I find it very strange a shipment use the 0x1A, several banks I do shipping simply use a normal line break at the end of the last row (and it is interesting that in many of them the documentation was not 100% correct)
– Bacco
I put the break the way you said it and it’s not doing the line break because it will be?
– Leandro Silva Campos
You have to see how it is that you are testing to see the break. I hope you are checking the real file, and not looking in the browser.
– Bacco
I edited with a tested and functional example.
– Bacco
The problem is that to concatenate would be Chr( 0x0A ).Chr( 0x0D ) in php and I did not take care of it. Good now is working but the bank keep talking that it has a special characters, will the whitespace that need why would it have to be with the Chr() function? I was using str_pad
– Leandro Silva Campos
Either make or create the string, as long as each field is the right size (totaling 240 or 400 characters, depending on the pattern)
– Bacco
thank you so much for trying to help, but using the line break like this: Chr( 0x0A ) + Chr( 0x0D ) did not work. It creates space between one line and another and when I put as the friend Giavanni said " r n" worked at first, I could not understand but important is that it worked.
– Leandro Silva Campos
I edited the answer with a demo, just to give you a better test: https://ideone.com/xKS0XD
– Bacco