__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
declare(strict_types=1);
namespace PhpMyAdmin;
use function array_intersect;
use function array_map;
use function explode;
use function fclose;
use function feof;
use function fgets;
use function fopen;
use function function_exists;
use function fwrite;
use function iconv;
use function mb_convert_encoding;
use function mb_convert_kana;
use function mb_detect_encoding;
use function mb_list_encodings;
use function recode_string;
use function tempnam;
use function unlink;
/**
* Encoding conversion helper class
*/
class Encoding
{
/**
* None encoding conversion engine
*/
public const ENGINE_NONE = 0;
/**
* iconv encoding conversion engine
*/
public const ENGINE_ICONV = 1;
/**
* recode encoding conversion engine
*/
public const ENGINE_RECODE = 2;
/**
* mbstring encoding conversion engine
*/
public const ENGINE_MB = 3;
/**
* Chosen encoding engine
*
* @var int
*/
private static $engine = null;
/**
* Map of conversion engine configurations
*
* Each entry contains:
*
* - function to detect
* - engine contant
* - extension name to warn when missing
*
* @var array
*/
private static $enginemap = [
'iconv' => [
'iconv',
self::ENGINE_ICONV,
'iconv',
],
'recode' => [
'recode_string',
self::ENGINE_RECODE,
'recode',
],
'mb' => [
'mb_convert_encoding',
self::ENGINE_MB,
'mbstring',
],
'none' => [
'isset',
self::ENGINE_NONE,
'',
],
];
/**
* Order of automatic detection of engines
*
* @var array
*/
private static $engineorder = [
'iconv',
'mb',
'recode',
];
/**
* Kanji encodings list
*
* @var string
*/
private static $kanjiEncodings = 'ASCII,SJIS,EUC-JP,JIS';
/**
* Initializes encoding engine detecting available backends.
*/
public static function initEngine(): void
{
$engine = 'auto';
if (isset($GLOBALS['cfg']['RecodingEngine'])) {
$engine = $GLOBALS['cfg']['RecodingEngine'];
}
/* Use user configuration */
if (isset(self::$enginemap[$engine])) {
if (function_exists(self::$enginemap[$engine][0])) {
self::$engine = self::$enginemap[$engine][1];
return;
}
Core::warnMissingExtension(self::$enginemap[$engine][2]);
}
/* Autodetection */
foreach (self::$engineorder as $engine) {
if (function_exists(self::$enginemap[$engine][0])) {
self::$engine = self::$enginemap[$engine][1];
return;
}
}
/* Fallback to none conversion */
self::$engine = self::ENGINE_NONE;
}
/**
* Setter for engine. Use with caution, mostly useful for testing.
*
* @param int $engine Engine encoding
*/
public static function setEngine(int $engine): void
{
self::$engine = $engine;
}
/**
* Checks whether there is any charset conversion supported
*/
public static function isSupported(): bool
{
if (self::$engine === null) {
self::initEngine();
}
return self::$engine != self::ENGINE_NONE;
}
/**
* Converts encoding of text according to parameters with detected
* conversion function.
*
* @param string $src_charset source charset
* @param string $dest_charset target charset
* @param string $what what to convert
*
* @return string converted text
*/
public static function convertString(
string $src_charset,
string $dest_charset,
string $what
): string {
if ($src_charset == $dest_charset) {
return $what;
}
if (self::$engine === null) {
self::initEngine();
}
switch (self::$engine) {
case self::ENGINE_RECODE:
return recode_string($src_charset . '..' . $dest_charset, $what);
case self::ENGINE_ICONV:
return iconv($src_charset, $dest_charset . ($GLOBALS['cfg']['IconvExtraParams'] ?? ''), $what);
case self::ENGINE_MB:
return mb_convert_encoding($what, $dest_charset, $src_charset);
default:
return $what;
}
}
/**
* Detects whether Kanji encoding is available
*/
public static function canConvertKanji(): bool
{
return $GLOBALS['lang'] === 'ja';
}
/**
* Setter for Kanji encodings. Use with caution, mostly useful for testing.
*/
public static function getKanjiEncodings(): string
{
return self::$kanjiEncodings;
}
/**
* Setter for Kanji encodings. Use with caution, mostly useful for testing.
*
* @param string $value Kanji encodings list
*/
public static function setKanjiEncodings(string $value): void
{
self::$kanjiEncodings = $value;
}
/**
* Reverses SJIS & EUC-JP position in the encoding codes list
*/
public static function kanjiChangeOrder(): void
{
$parts = explode(',', self::$kanjiEncodings);
if ($parts[1] === 'EUC-JP') {
self::$kanjiEncodings = 'ASCII,SJIS,EUC-JP,JIS';
return;
}
self::$kanjiEncodings = 'ASCII,EUC-JP,SJIS,JIS';
}
/**
* Kanji string encoding convert
*
* @param string $str the string to convert
* @param string $enc the destination encoding code
* @param string $kana set 'kana' convert to JIS-X208-kana
*
* @return string the converted string
*/
public static function kanjiStrConv(string $str, string $enc, string $kana): string
{
if ($enc == '' && $kana == '') {
return $str;
}
$string_encoding = mb_detect_encoding($str, self::$kanjiEncodings);
if ($string_encoding === false) {
$string_encoding = 'utf-8';
}
if ($kana === 'kana') {
$dist = mb_convert_kana($str, 'KV', $string_encoding);
$str = $dist;
}
if ($string_encoding != $enc && $enc != '') {
return mb_convert_encoding($str, $enc, $string_encoding);
}
return $str;
}
/**
* Kanji file encoding convert
*
* @param string $file the name of the file to convert
* @param string $enc the destination encoding code
* @param string $kana set 'kana' convert to JIS-X208-kana
*
* @return string the name of the converted file
*/
public static function kanjiFileConv(string $file, string $enc, string $kana): string
{
if ($enc == '' && $kana == '') {
return $file;
}
$tmpfname = (string) tempnam($GLOBALS['config']->getUploadTempDir(), $enc);
$fpd = fopen($tmpfname, 'wb');
if ($fpd === false) {
return $file;
}
$fps = fopen($file, 'r');
if ($fps === false) {
return $file;
}
self::kanjiChangeOrder();
while (! feof($fps)) {
$line = fgets($fps, 4096);
if ($line === false) {
continue;
}
$dist = self::kanjiStrConv($line, $enc, $kana);
fwrite($fpd, $dist);
}
self::kanjiChangeOrder();
fclose($fps);
fclose($fpd);
unlink($file);
return $tmpfname;
}
/**
* Defines radio form fields to switch between encoding modes
*
* @return string HTML code for the radio controls
*/
public static function kanjiEncodingForm(): string
{
$template = new Template();
return $template->render('encoding/kanji_encoding_form');
}
/**
* Lists available encodings.
*
* @return array
*/
public static function listEncodings(): array
{
if (self::$engine === null) {
self::initEngine();
}
/* Most engines do not support listing */
if (self::$engine != self::ENGINE_MB) {
return $GLOBALS['cfg']['AvailableCharsets'];
}
return array_intersect(
array_map('strtolower', mb_list_encodings()),
$GLOBALS['cfg']['AvailableCharsets']
);
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| Charsets | Folder | 0755 |
|
|
| Command | Folder | 0755 |
|
|
| Config | Folder | 0755 |
|
|
| ConfigStorage | Folder | 0755 |
|
|
| Controllers | Folder | 0755 |
|
|
| Crypto | Folder | 0755 |
|
|
| Database | Folder | 0755 |
|
|
| Dbal | Folder | 0755 |
|
|
| Display | Folder | 0755 |
|
|
| Engines | Folder | 0755 |
|
|
| Exceptions | Folder | 0755 |
|
|
| Export | Folder | 0755 |
|
|
| Gis | Folder | 0755 |
|
|
| Html | Folder | 0755 |
|
|
| Http | Folder | 0755 |
|
|
| Image | Folder | 0755 |
|
|
| Import | Folder | 0755 |
|
|
| Navigation | Folder | 0755 |
|
|
| Partitioning | Folder | 0755 |
|
|
| Plugins | Folder | 0755 |
|
|
| Properties | Folder | 0755 |
|
|
| Providers | Folder | 0755 |
|
|
| Query | Folder | 0755 |
|
|
| Server | Folder | 0755 |
|
|
| Setup | Folder | 0755 |
|
|
| Table | Folder | 0755 |
|
|
| Twig | Folder | 0755 |
|
|
| Utils | Folder | 0755 |
|
|
| WebAuthn | Folder | 0755 |
|
|
| Advisor.php | File | 12.32 KB | 0644 |
|
| Bookmark.php | File | 9.19 KB | 0644 |
|
| BrowseForeigners.php | File | 10.63 KB | 0644 |
|
| Cache.php | File | 1.5 KB | 0644 |
|
| Charsets.php | File | 6.82 KB | 0644 |
|
| CheckUserPrivileges.php | File | 11.3 KB | 0644 |
|
| Common.php | File | 19.4 KB | 0644 |
|
| Config.php | File | 41.65 KB | 0644 |
|
| Console.php | File | 3.25 KB | 0644 |
|
| Core.php | File | 28.91 KB | 0644 |
|
| CreateAddField.php | File | 15.83 KB | 0644 |
|
| DatabaseInterface.php | File | 71.73 KB | 0644 |
|
| DbTableExists.php | File | 2.86 KB | 0644 |
|
| Encoding.php | File | 8.41 KB | 0644 |
|
| Error.php | File | 13.63 KB | 0644 |
|
| ErrorHandler.php | File | 18.31 KB | 0644 |
|
| ErrorReport.php | File | 8.99 KB | 0644 |
|
| Export.php | File | 45.7 KB | 0644 |
|
| FieldMetadata.php | File | 11.11 KB | 0644 |
|
| File.php | File | 19.75 KB | 0644 |
|
| FileListing.php | File | 2.88 KB | 0644 |
|
| FlashMessages.php | File | 1.22 KB | 0644 |
|
| Font.php | File | 5.58 KB | 0644 |
|
| Footer.php | File | 8.06 KB | 0644 |
|
| Git.php | File | 18 KB | 0644 |
|
| Header.php | File | 20 KB | 0644 |
|
| Import.php | File | 48.72 KB | 0644 |
|
| Index.php | File | 14.83 KB | 0644 |
|
| IndexColumn.php | File | 4.75 KB | 0644 |
|
| InsertEdit.php | File | 89.05 KB | 0644 |
|
| InternalRelations.php | File | 17.31 KB | 0644 |
|
| IpAllowDeny.php | File | 9.13 KB | 0644 |
|
| Language.php | File | 4.47 KB | 0644 |
|
| LanguageManager.php | File | 22.74 KB | 0644 |
|
| Linter.php | File | 4.99 KB | 0644 |
|
| ListAbstract.php | File | 1.67 KB | 0644 |
|
| ListDatabase.php | File | 4.11 KB | 0644 |
|
| Logging.php | File | 2.69 KB | 0644 |
|
| Menu.php | File | 20.4 KB | 0644 |
|
| Message.php | File | 18.68 KB | 0644 |
|
| Mime.php | File | 927 B | 0644 |
|
| Normalization.php | File | 41.53 KB | 0644 |
|
| OpenDocument.php | File | 8.62 KB | 0644 |
|
| Operations.php | File | 35.11 KB | 0644 |
|
| OutputBuffering.php | File | 4.1 KB | 0644 |
|
| ParseAnalyze.php | File | 2.34 KB | 0644 |
|
| Pdf.php | File | 4.17 KB | 0644 |
|
| Plugins.php | File | 21.83 KB | 0644 |
|
| Profiling.php | File | 2.16 KB | 0644 |
|
| RecentFavoriteTable.php | File | 11.44 KB | 0644 |
|
| Replication.php | File | 4.81 KB | 0644 |
|
| ReplicationGui.php | File | 21.24 KB | 0644 |
|
| ReplicationInfo.php | File | 4.79 KB | 0644 |
|
| ResponseRenderer.php | File | 13.5 KB | 0644 |
|
| Routing.php | File | 6.55 KB | 0644 |
|
| Sanitize.php | File | 11.98 KB | 0644 |
|
| SavedSearches.php | File | 11.33 KB | 0644 |
|
| Scripts.php | File | 3.74 KB | 0644 |
|
| Session.php | File | 8.16 KB | 0644 |
|
| Sql.php | File | 64.01 KB | 0644 |
|
| SqlQueryForm.php | File | 6.74 KB | 0644 |
|
| StorageEngine.php | File | 15.71 KB | 0644 |
|
| SystemDatabase.php | File | 3.98 KB | 0644 |
|
| Table.php | File | 90.33 KB | 0644 |
|
| Template.php | File | 4.5 KB | 0644 |
|
| Theme.php | File | 7.32 KB | 0644 |
|
| ThemeManager.php | File | 7 KB | 0644 |
|
| Tracker.php | File | 30.34 KB | 0644 |
|
| Tracking.php | File | 36.11 KB | 0644 |
|
| Transformations.php | File | 16.31 KB | 0644 |
|
| TwoFactor.php | File | 7.5 KB | 0644 |
|
| Types.php | File | 25.85 KB | 0644 |
|
| Url.php | File | 10.61 KB | 0644 |
|
| UrlRedirector.php | File | 1.74 KB | 0644 |
|
| UserPassword.php | File | 6.86 KB | 0644 |
|
| UserPreferences.php | File | 10.49 KB | 0644 |
|
| Util.php | File | 86.45 KB | 0644 |
|
| Version.php | File | 556 B | 0644 |
|
| VersionInformation.php | File | 7.3 KB | 0644 |
|
| ZipExtension.php | File | 10.33 KB | 0644 |
|