Skip to content

Commit 9a3ca08

Browse files
committed
Initial commit
0 parents  commit 9a3ca08

File tree

4 files changed

+198
-0
lines changed

4 files changed

+198
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
vendor
2+
composer.lock
3+
build

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# PHP convert files encoding
2+
PHP class to convert files encoding
3+
4+
## Usage
5+
```php
6+
construct($encoding_to = 'UTF-8', $encodings_detected = 'UTF-8,ISO-8859-1,WINDOWS-1252');
7+
EncodeFile($fileR, $fileW, &$encoding_original, &$encoding_final);
8+
```
9+
10+
This is an example:
11+
12+
```php
13+
include 'src/codification.php';
14+
15+
$codification = new Codification();
16+
17+
$fileR = "file.txt";
18+
$fileW = 'encodedFile.txt;
19+
$encoding_original = "";
20+
$encoding_final = "";
21+
22+
$result = $codification->EncodeFile($fileR, $fileW, $encoding_original, $encoding_final);
23+
24+
($result) ? 'True' : 'False';
25+
echo "Original encoding: " . $encoding_original;
26+
echo "Final encoding: " . $encoding_final;
27+
```
28+
29+
## Encoding values
30+
31+
### Allowed encodings
32+
http://php.net/manual/es/mbstring.supported-encodings.php
33+
34+
### Default values
35+
```php
36+
$encoding_to = 'UTF-8';
37+
$encodings_detected = 'UTF-8,ISO-8859-1,WINDOWS-1252';
38+
```

composer.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "descom/php-codification",
3+
"description": "PHP class to encode files",
4+
"type": "library",
5+
"license": "MIT",
6+
"keywords": ["php", "encoding", "encode", "convert file encoding", "UTF-8", "ISO-8859-1"],
7+
"homepage": "https://www.descomsms.com",
8+
"authors": [
9+
{
10+
"name": "Juan José Llorens",
11+
"email": "llorensjj@gmail.com"
12+
}
13+
],
14+
"require": {
15+
"php": "^5.6 || ^7.0"
16+
},
17+
"autoload": {
18+
"psr-4": {
19+
"Descom\\Codification\\": "src/"
20+
}
21+
},
22+
"require-dev": {
23+
"phpunit/phpunit": "^5.7"
24+
},
25+
"autoload-dev": {
26+
"psr-4": {
27+
"Descom\\Codification\\Test\\": "tests"
28+
}
29+
},
30+
"scripts": {
31+
"test": "phpunit"
32+
}
33+
}

src/Codification.php

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
class Codification
4+
{
5+
private $encoding_to;
6+
private $encodings_detected;
7+
8+
public function __construct($encoding_to = 'UTF-8', $encodings_detected = 'UTF-8,ISO-8859-1,WINDOWS-1252')
9+
{
10+
$this->encoding_to = $encoding_to;
11+
$this->encodings_detected = $encodings_detected;
12+
}
13+
14+
/**
15+
* Encode file.
16+
*
17+
* @param string $fileR Original file
18+
* @param string $fileW Encoded file
19+
* @param string &$encoding_original Original encoding
20+
* @param string &$encoding_final Final encoding
21+
*
22+
* @return bool
23+
*/
24+
public function EncodeFile($fileR, $fileW, &$encoding_original, &$encoding_final)
25+
{
26+
$encoding_original = $this->DetectEncoding($fileR);
27+
if ($encoding_original != $this->encoding_to) {
28+
if ($this->ConvertEncoding($fileR, $fileW, $encoding_original)) {
29+
$encoding_final = $this->DetectEncoding($fileW);
30+
31+
return $this->CheckEncoding($fileW);
32+
} else {
33+
$encoding_final = '';
34+
35+
return false;
36+
}
37+
} else {
38+
$encoding_final = $encoding_original;
39+
40+
return $this->CheckEncoding($fileR);
41+
}
42+
}
43+
44+
/**
45+
* Detect file encoding.
46+
*
47+
* @param string $fileR Original file
48+
*
49+
* @return string File encoding
50+
*/
51+
public function DetectEncoding($fileR)
52+
{
53+
$handleR = @fopen($fileR, 'r');
54+
if ($handleR) {
55+
while ($line = fgets($handleR, 4096)) {
56+
$encoding = mb_detect_encoding($line, $this->encodings_detected, true);
57+
if ($encoding != $this->encoding_to) {
58+
fclose($handleR);
59+
60+
return $encoding;
61+
}
62+
}
63+
fclose($handleR);
64+
}
65+
66+
return $this->encoding_to;
67+
}
68+
69+
/**
70+
* Encode file.
71+
*
72+
* @param string $fileR Original file
73+
* @param string $fileW Encoded file
74+
* @param string &$encoding_original Original encoding
75+
*
76+
* @return bool
77+
*/
78+
public function ConvertEncoding($fileR, $fileW, $encoding_original)
79+
{
80+
try {
81+
$handleR = @fopen($fileR, 'r');
82+
$handleW = @fopen($fileW, 'w');
83+
84+
if ($this->encoding_to != $encoding_original) {
85+
if ($handleR && $handleW) {
86+
while ($line = fgets($handleR, 4096)) {
87+
fwrite($handleW, mb_convert_encoding($line, $this->encoding_to, $encoding_original), 4096);
88+
}
89+
}
90+
fclose($handleR);
91+
fclose($handleW);
92+
}
93+
} catch (Exception $e) {
94+
return false;
95+
}
96+
97+
return true;
98+
}
99+
100+
/**
101+
* Check if file encoding matches encoding_to.
102+
*
103+
* @param string $fileR Original file
104+
*
105+
* @return bool
106+
*/
107+
public function CheckEncoding($fileR)
108+
{
109+
$handleR = @fopen($fileR, 'r');
110+
111+
if ($handleR) {
112+
while ($line = fgets($handleR, 4096)) {
113+
if (!mb_check_encoding($line, $this->encoding_to)) {
114+
fclose($handleR);
115+
116+
return false;
117+
}
118+
}
119+
fclose($handleR);
120+
}
121+
122+
return true;
123+
}
124+
}

0 commit comments

Comments
 (0)