Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <style type="text/css">
- table {
- width: 100%;
- border-collapse: collapse;
- }
- th, td {
- border: 1px solid black;
- padding: 10px;
- }
- th:nth-of-type(2n), td:nth-of-type(2n) {
- background: rgba(0, 0, 0, 0.1);
- }
- tr:nth-of-type(2n) th, tr:nth-of-type(2n) td {
- background: rgba(0, 0, 0, 0.15);
- }
- tr:nth-of-type(2n) th:nth-of-type(2n), tr:nth-of-type(2n) td:nth-of-type(2n) {
- background: rgba(0, 0, 0, 0.25);
- }
- </style>
- </head>
- <body>
- <form method="POST" action="index.php" enctype="multipart/form-data">
- <input type="file" name="file" />
- <button type="submit">Envoyer</button>
- </form>
- <?php
- function csvStringToArray($sInput, $sDelimiter=',', $sEnclosure='"') {
- $rTemp = fopen("php://memory", "rw");
- fwrite($rTemp, $sInput);
- fseek($rTemp, 0);
- $aReturn = array();
- while (($aData = fgetcsv($rTemp, 4096, $sDelimiter, $sEnclosure)) !== false) {
- $aReturn[] = $aData;
- }
- fclose($rTemp);
- return $aReturn;
- }
- function detectAndConvertEncoding($sInput, &$sOutput) {
- $UTF32_BIG_ENDIAN_BOM = chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF);
- $UTF32_LITTLE_ENDIAN_BOM = chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00);
- $UTF16_BIG_ENDIAN_BOM = chr(0xFE) . chr(0xFF);
- $UTF16_LITTLE_ENDIAN_BOM = chr(0xFF) . chr(0xFE);
- $UTF8_BOM = chr(0xEF) . chr(0xBB) . chr(0xBF);
- $aOutputChars = array('...', "'", "'", '"', '"', '•', '-', '-');
- $aUTF8Chars = array("\xe2\x80\xa6", "\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\xa2", "\xe2\x80\x93", "\xe2\x80\x94");
- $aWinChars = array(chr(133), chr(145), chr(146), chr(147), chr(148), chr(149), chr(150), chr(151));
- $sFirst2 = substr($sInput, 0, 2);
- $sFirst3 = substr($sInput, 0, 3);
- $sFirst4 = substr($sInput, 0, 3);
- $mUTFDetected = false;
- if ($sFirst3 == $UTF8_BOM) {
- $mUTFDetected = 'UTF-8';
- } elseif ($sFirst4 == $UTF32_BIG_ENDIAN_BOM) {
- $mUTFDetected = 'UTF-32BE';
- } elseif ($sFirst4 == $UTF32_LITTLE_ENDIAN_BOM) {
- $mUTFDetected = 'UTF-32LE';
- } elseif ($sFirst2 == $UTF16_BIG_ENDIAN_BOM) {
- $mUTFDetected = 'UTF-16BE';
- } elseif ($sFirst2 == $UTF16_LITTLE_ENDIAN_BOM) {
- $mUTFDetected = 'UTF-16LE';
- }
- $mUTF8Detected = mb_detect_encoding($sInput, 'UTF-8', true);
- $mEncodingDetected = mb_detect_encoding($sInput, 'UTF-8, UTF-16, ISO-8859-1', true);
- $bUTF8 = $mUTF8Detected !== false;
- $bCanConvert = $bUTF8 === false;
- $sRealEncoding = 'UTF-8';
- if ($bUTF8) {
- if ($mUTFDetected === false) {
- $sRealEncoding = 'UTF-8 without BOM';
- }
- } else {
- if ($mUTFDetected === false) {
- if ($mEncodingDetected === false) {
- $sRealEncoding = '[failed]';
- } else {
- $sRealEncoding = $mEncodingDetected;
- }
- } else {
- $sRealEncoding = $mUTFDetected;
- }
- }
- if ($bCanConvert) {
- $sInput = str_replace($aUTF8Chars, $aOutputChars, $sInput);
- $sInput = str_replace($aWinChars, $aOutputChars, $sInput);
- $sOutput = mb_convert_encoding($sInput, 'UTF-8', $sRealEncoding);
- } else {
- if ($bUTF8) {
- $sOutput = $sInput;
- } else {
- $sOutput = false;
- }
- }
- return $sRealEncoding;
- }
- if (isset($_FILES['file'])) {
- $aFile = $_FILES['file'];
- $sName = $aFile['tmp_name'];
- $sContents = file_get_contents($sName);
- $sEncoding = detectAndConvertEncoding($sContents, $sFixedContents);
- echo '<p>Encoding detected: ' . $sEncoding . '</p>';
- echo '<table>';
- $aData = csvStringToArray($sFixedContents, ';');
- for ($i = 0; $i < count($aData); $i++) {
- echo '<tr>';
- for ($j = 0; $j < count($aData[$i]); $j++) {
- echo '<td>' . $aData[$i][$j] . '</td>';
- }
- echo '</tr>';
- }
- echo '</table>';
- }
- ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment