Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php

namespace PhpOffice\PhpSpreadsheet\Shared;

use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;

class CodePage
{
> public const DEFAULT_CODE_PAGE = 'CP1252'; /** > * Convert Microsoft Code Page Identifier to Code Page Name which iconv > private static $pageArray = [ * and mbstring understands. > 0 => 'CP1252', // CodePage is not always correctly set when the xls file was saved by Apple's Numbers program * > 367 => 'ASCII', // ASCII * @param int $codePage Microsoft Code Page Indentifier > 437 => 'CP437', // OEM US * > //720 => 'notsupported', // OEM Arabic * @throws PhpSpreadsheetException > 737 => 'CP737', // OEM Greek * > 775 => 'CP775', // OEM Baltic * @return string Code Page Name > 850 => 'CP850', // OEM Latin I */ > 852 => 'CP852', // OEM Latin II (Central European) public static function numberToName($codePage) > 855 => 'CP855', // OEM Cyrillic { > 857 => 'CP857', // OEM Turkish switch ($codePage) { > 858 => 'CP858', // OEM Multilingual Latin I with Euro case 367: > 860 => 'CP860', // OEM Portugese return 'ASCII'; // ASCII > 861 => 'CP861', // OEM Icelandic case 437: > 862 => 'CP862', // OEM Hebrew return 'CP437'; // OEM US > 863 => 'CP863', // OEM Canadian (French) case 720: > 864 => 'CP864', // OEM Arabic throw new PhpSpreadsheetException('Code page 720 not supported.'); // OEM Arabic > 865 => 'CP865', // OEM Nordic case 737: > 866 => 'CP866', // OEM Cyrillic (Russian) return 'CP737'; // OEM Greek > 869 => 'CP869', // OEM Greek (Modern) case 775: > 874 => 'CP874', // ANSI Thai return 'CP775'; // OEM Baltic > 932 => 'CP932', // ANSI Japanese Shift-JIS case 850: > 936 => 'CP936', // ANSI Chinese Simplified GBK return 'CP850'; // OEM Latin I > 949 => 'CP949', // ANSI Korean (Wansung) case 852: > 950 => 'CP950', // ANSI Chinese Traditional BIG5 return 'CP852'; // OEM Latin II (Central European) > 1200 => 'UTF-16LE', // UTF-16 (BIFF8) case 855: > 1250 => 'CP1250', // ANSI Latin II (Central European) return 'CP855'; // OEM Cyrillic > 1251 => 'CP1251', // ANSI Cyrillic case 857: > 1252 => 'CP1252', // ANSI Latin I (BIFF4-BIFF7) return 'CP857'; // OEM Turkish > 1253 => 'CP1253', // ANSI Greek case 858: > 1254 => 'CP1254', // ANSI Turkish return 'CP858'; // OEM Multilingual Latin I with Euro > 1255 => 'CP1255', // ANSI Hebrew case 860: > 1256 => 'CP1256', // ANSI Arabic return 'CP860'; // OEM Portugese > 1257 => 'CP1257', // ANSI Baltic case 861: > 1258 => 'CP1258', // ANSI Vietnamese return 'CP861'; // OEM Icelandic > 1361 => 'CP1361', // ANSI Korean (Johab) case 862: > 10000 => 'MAC', // Apple Roman return 'CP862'; // OEM Hebrew > 10001 => 'CP932', // Macintosh Japanese case 863: > 10002 => 'CP950', // Macintosh Chinese Traditional return 'CP863'; // OEM Canadian (French) > 10003 => 'CP1361', // Macintosh Korean case 864: > 10004 => 'MACARABIC', // Apple Arabic return 'CP864'; // OEM Arabic > 10005 => 'MACHEBREW', // Apple Hebrew case 865: > 10006 => 'MACGREEK', // Macintosh Greek return 'CP865'; // OEM Nordic > 10007 => 'MACCYRILLIC', // Macintosh Cyrillic case 866: > 10008 => 'CP936', // Macintosh - Simplified Chinese (GB 2312) return 'CP866'; // OEM Cyrillic (Russian) > 10010 => 'MACROMANIA', // Macintosh Romania case 869: > 10017 => 'MACUKRAINE', // Macintosh Ukraine return 'CP869'; // OEM Greek (Modern) > 10021 => 'MACTHAI', // Macintosh Thai case 874: > 10029 => 'MACCENTRALEUROPE', // Macintosh Central Europe return 'CP874'; // ANSI Thai > 10079 => 'MACICELAND', // Macintosh Icelandic case 932: > 10081 => 'MACTURKISH', // Macintosh Turkish return 'CP932'; // ANSI Japanese Shift-JIS > 10082 => 'MACCROATIAN', // Macintosh Croatian case 936: > 21010 => 'UTF-16LE', // UTF-16 (BIFF8) This isn't correct, but some Excel writer libraries erroneously use Codepage 21010 for UTF-16LE return 'CP936'; // ANSI Chinese Simplified GBK > 32768 => 'MAC', // Apple Roman case 949: > //32769 => 'unsupported', // ANSI Latin I (BIFF2-BIFF3) return 'CP949'; // ANSI Korean (Wansung) > 65000 => 'UTF-7', // Unicode (UTF-7) case 950: > 65001 => 'UTF-8', // Unicode (UTF-8) return 'CP950'; // ANSI Chinese Traditional BIG5 > ]; case 1200: > return 'UTF-16LE'; // UTF-16 (BIFF8) > public static function validate(string $codePage): bool case 1250: > { return 'CP1250'; // ANSI Latin II (Central European) > return in_array($codePage, self::$pageArray, true); case 1251: > } return 'CP1251'; // ANSI Cyrillic >
< * @throws PhpSpreadsheetException < *
< public static function numberToName($codePage)
> public static function numberToName(int $codePage): string
< switch ($codePage) { < case 367: < return 'ASCII'; // ASCII < case 437: < return 'CP437'; // OEM US < case 720: < throw new PhpSpreadsheetException('Code page 720 not supported.'); // OEM Arabic < case 737: < return 'CP737'; // OEM Greek < case 775: < return 'CP775'; // OEM Baltic < case 850: < return 'CP850'; // OEM Latin I < case 852: < return 'CP852'; // OEM Latin II (Central European) < case 855: < return 'CP855'; // OEM Cyrillic < case 857: < return 'CP857'; // OEM Turkish < case 858: < return 'CP858'; // OEM Multilingual Latin I with Euro < case 860: < return 'CP860'; // OEM Portugese < case 861: < return 'CP861'; // OEM Icelandic < case 862: < return 'CP862'; // OEM Hebrew < case 863: < return 'CP863'; // OEM Canadian (French) < case 864: < return 'CP864'; // OEM Arabic < case 865: < return 'CP865'; // OEM Nordic < case 866: < return 'CP866'; // OEM Cyrillic (Russian) < case 869: < return 'CP869'; // OEM Greek (Modern) < case 874: < return 'CP874'; // ANSI Thai < case 932: < return 'CP932'; // ANSI Japanese Shift-JIS < case 936: < return 'CP936'; // ANSI Chinese Simplified GBK < case 949: < return 'CP949'; // ANSI Korean (Wansung) < case 950: < return 'CP950'; // ANSI Chinese Traditional BIG5 < case 1200: < return 'UTF-16LE'; // UTF-16 (BIFF8) < case 1250: < return 'CP1250'; // ANSI Latin II (Central European) < case 1251: < return 'CP1251'; // ANSI Cyrillic < case 0: < // CodePage is not always correctly set when the xls file was saved by Apple's Numbers program < case 1252: < return 'CP1252'; // ANSI Latin I (BIFF4-BIFF7) < case 1253: < return 'CP1253'; // ANSI Greek < case 1254: < return 'CP1254'; // ANSI Turkish < case 1255: < return 'CP1255'; // ANSI Hebrew < case 1256: < return 'CP1256'; // ANSI Arabic < case 1257: < return 'CP1257'; // ANSI Baltic < case 1258: < return 'CP1258'; // ANSI Vietnamese < case 1361: < return 'CP1361'; // ANSI Korean (Johab) < case 10000: < return 'MAC'; // Apple Roman < case 10001: < return 'CP932'; // Macintosh Japanese < case 10002: < return 'CP950'; // Macintosh Chinese Traditional < case 10003: < return 'CP1361'; // Macintosh Korean < case 10004: < return 'MACARABIC'; // Apple Arabic < case 10005: < return 'MACHEBREW'; // Apple Hebrew < case 10006: < return 'MACGREEK'; // Macintosh Greek < case 10007: < return 'MACCYRILLIC'; // Macintosh Cyrillic < case 10008: < return 'CP936'; // Macintosh - Simplified Chinese (GB 2312) < case 10010: < return 'MACROMANIA'; // Macintosh Romania < case 10017: < return 'MACUKRAINE'; // Macintosh Ukraine < case 10021: < return 'MACTHAI'; // Macintosh Thai < case 10029: < return 'MACCENTRALEUROPE'; // Macintosh Central Europe < case 10079: < return 'MACICELAND'; // Macintosh Icelandic < case 10081: < return 'MACTURKISH'; // Macintosh Turkish < case 10082: < return 'MACCROATIAN'; // Macintosh Croatian < case 21010: < return 'UTF-16LE'; // UTF-16 (BIFF8) This isn't correct, but some Excel writer libraries erroneously use Codepage 21010 for UTF-16LE < case 32768: < return 'MAC'; // Apple Roman < case 32769: < throw new PhpSpreadsheetException('Code page 32769 not supported.'); // ANSI Latin I (BIFF2-BIFF3) < case 65000: < return 'UTF-7'; // Unicode (UTF-7) < case 65001: < return 'UTF-8'; // Unicode (UTF-8)
> if (array_key_exists($codePage, self::$pageArray)) { > return self::$pageArray[$codePage]; > } > if ($codePage == 720 || $codePage == 32769) { > throw new PhpSpreadsheetException("Code page $codePage not supported."); // OEM Arabic
> } > > public static function getEncodings(): array > { > return self::$pageArray;