![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/extmag/shiplab/Helper/ |
<?php /** * Copyright © Extmag. All rights reserved. */ namespace Extmag\Shiplab\Helper; use DOMDocument; use Exception; use Extmag\Shiplab\Model\Source\CarrierCodes; use Extmag\Shiplab\Webservice\Logger; use Magento\Framework\Module\Dir\Reader; class Connector { public $manager; public ResponseFactory $responseFactory; public Reader $configReader; public CarrierCodes $carrierCodes; /** * @param Manager $manager * @param ResponseFactory $responseFactory * @param Reader $configReader * @param CarrierCodes $carrierCodes */ public function __construct( Manager $manager, ResponseFactory $responseFactory, Reader $configReader, CarrierCodes $carrierCodes ) { $this->manager = $manager; $this->responseFactory = $responseFactory; $this->configReader = $configReader; $this->carrierCodes = $carrierCodes; } /** * Get API URL * * @param $isTest * @param $carrierCode * @param $requestType * @param array $request * @return mixed * @throws Exception */ public function getAPIUrl($isTest, $carrierCode, $requestType, $request = []) { if (!empty($isTest)) { $isTest = (int)$isTest; } else { $isTest = 0; } $carrierData = $this->carrierCodes->getCarriers($carrierCode); if (!empty($carrierData['api_urls'])) { $carriersAndTypes = $carrierData['api_urls']; } if (isset($carriersAndTypes[$isTest][strtolower($requestType)])) { return $carriersAndTypes[$isTest][strtolower($requestType)]; } else { throw new Exception(__('Carrier code "%1" or Request type "%2" is not found', $carrierCode, $requestType)); } } /** * @param array $arrayRequest * * @return mixed */ public function send(array $arrayRequest) { $debugData['request'] = json_encode($arrayRequest, JSON_UNESCAPED_SLASHES); try { $data = []; foreach ($arrayRequest['Request'] as $key => $item) { $data[$key] = [ 'carrier' => $item['Carrier'], 'context' => $item['Context'], 'type' => $item['Type'], 'mode' => $item['LiveMode'], 'url' => $this->getAPIUrl($item['LiveMode'], $item['Carrier'], $item['Type'], $item), 'data' => $this->formatNativeData($item['NativeScheme'], $item['Carrier'], $item['Type']), 'additionalData' => $item['AdditionalData'] ?? [], ]; $data = $this->extraRequestDataByCarrier($data, $key, $item); if (!empty($item['ShipmentIdentification'])) { $data[$key]['ShipmentIdentification'] = $item['ShipmentIdentification']; } } $response = $this->makeMultiRequest( $data, [ CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, CURLOPT_TIMEOUT => 50, ], ); $debugData['result'] = $response; } catch (Exception $e) { $debugData['result'] = [ 'error' => $e->getMessage(), 'code' => $e->getCode(), 'trace' => $e->getTraceAsString(), ]; } $this->manager->debug($debugData); return $debugData; } /** * @param $data * @param array $options * @return array * @throws Exception */ protected function makeMultiRequest($data, $options = []) { $result = []; $multihandle = curl_multi_init(); $handles = $this->setHandles($multihandle, $data, $options); $process = null; $status = CURLM_OK; for (; ;) { $status = curl_multi_exec($multihandle, $process); if ($process < 1) { break; } else { curl_multi_select($multihandle, 0.1); } } if ($status != CURLM_OK) { $this->manager->warning(curl_multi_strerror($status)); } if (!empty($handles)) { foreach ($handles as $key => $handle) { $result[$key] = $this->parseResponseData( curl_multi_getcontent($handle), $data[$key] ); curl_multi_remove_handle($multihandle, $handle); $this->multiRequestByCarrier($data, $key, $result); curl_multi_remove_handle($multihandle, $handle); } } curl_multi_close($multihandle); return $result; } /** * @param $multihandle * @param $data * @param $options * @return array */ public function setHandles(&$multihandle, $data, $options) { $handles = []; foreach ($data as $key => $item) { $handles[$key] = curl_init(); curl_setopt($handles[$key], CURLOPT_URL, $item['url']); curl_setopt($handles[$key], CURLOPT_RETURNTRANSFER, 1); if (!empty($item['additionalData']['HTTP_REQUEST_TYPE'])) { if ($item['additionalData']['HTTP_REQUEST_TYPE'] === "DELETE") { curl_setopt($handles[$key], CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($handles[$key], CURLOPT_POST, 0); } else { if ($item['additionalData']['HTTP_REQUEST_TYPE'] === "GET") { curl_setopt($handles[$key], CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($handles[$key], CURLOPT_POST, 0); } } } else { curl_setopt($handles[$key], CURLOPT_POST, 1); curl_setopt($handles[$key], CURLOPT_POSTFIELDS, $item['data']); } if (!empty($options)) { curl_setopt_array($handles[$key], $options); } if (!empty($item['additionalData']['HTTP_HEADERS'])) { curl_setopt($handles[$key], CURLOPT_HTTPHEADER, $item['additionalData']['HTTP_HEADERS']); } curl_multi_add_handle($multihandle, $handles[$key]); } return $handles; } /** * @param $data * @param $carrier * @param null $requestType * @param string $formattedData * * @return string */ public function formatNativeData($data, $carrier, $requestType = null, $formattedData = '') { $this->manager->debug($formattedData); return $formattedData; } /** * @param $responseData * @param $data * * @return array|mixed * @throws Exception */ protected function parseResponseData($responseData, $data) { $carrier = $data['carrier']; $type = $data['type']; $context = $data['context']; $shipmentIdentification = $data['ShipmentIdentification'] ?? null; $this->manager->debug($responseData); $factory = $this->responseFactory->create($carrier, $type); $responseData = $factory->parse($responseData, $context); if (strtolower($type) == 'track' && !empty($responseData['ShipmentIdentification'])) { $responseData['ShipmentIdentification'] = $shipmentIdentification; } return $responseData; } /** * @param DOMDocument $doc * @param $name * @param $data * @return mixed */ public static function serializeXML(DOMDocument $doc, $name, $data) { return self::processXML($doc, $name, $data); } /** * @param DOMDocument $doc * @param $name * @param $data * @return mixed */ protected static function processXML(DOMDocument $doc, $name, $data) { $element = $doc->createElement($name); if (is_array($data)) { foreach ($data as $key => $value) { if ($key === '@attributes') { foreach ($value as $attrKey => $attrVal) { $element->setAttribute($attrKey, $attrVal); } continue; } if (!is_numeric($key)) { if (is_array($value) && is_numeric(key($value))) { // Multiple elements with the same tag foreach ($value as $index => $val) { if ($val != "" && $val != null) { $element->appendChild(self::processXML($doc, $key, $val)); } } } elseif ($value != "" && $value != null) { $element->appendChild(self::processXML($doc, $key, $value)); } } else { if (!is_array($value)) { $element->appendChild( $doc->createTextNode( mb_convert_encoding(self::latinize((string)$value), 'ISO-8859-1', "UTF-8") ) ); return $element; } return self::processXML($doc, $name, $value); } } } elseif ($data != null) { $element->appendChild( $doc->createTextNode( mb_convert_encoding(self::latinize((string)$data), 'ISO-8859-1', "UTF-8") ) ); } return $element; } /** * @param $str * @return array|mixed|string|string[]|null */ protected static function latinize($str) { if (is_string($str)) { $str = preg_replace_callback( '/[^-+:A-Z0-9]/iu', function ($matches) { $chars = [ 'Á' => 'A', 'Ă' => 'A', 'Ắ' => 'A', 'Ặ' => 'A', 'Ằ' => 'A', 'Ẳ' => 'A', 'Ẵ' => 'A', 'Ǎ' => 'A', 'Â' => 'A', 'Ấ' => 'A', 'Ậ' => 'A', 'Ầ' => 'A', 'Ẩ' => 'A', 'Ẫ' => 'A', 'Ä' => 'A', 'Ǟ' => 'A', 'Ȧ' => 'A', 'Ǡ' => 'A', 'Ạ' => 'A', 'Ȁ' => 'A', 'À' => 'A', 'Ả' => 'A', 'Ȃ' => 'A', 'Ā' => 'A', 'Ą' => 'A', 'Å' => 'A', 'Ǻ' => 'A', 'Ḁ' => 'A', 'Ⱥ' => 'A', 'Ã' => 'A', 'Ꜳ' => 'AA', 'Æ' => 'AE', 'Ǽ' => 'AE', 'Ǣ' => 'AE', 'Ꜵ' => 'AO', 'Ꜷ' => 'AU', 'Ꜹ' => 'AV', 'Ꜻ' => 'AV', 'Ꜽ' => 'AY', 'Ḃ' => 'B', 'Ḅ' => 'B', 'Ɓ' => 'B', 'Ḇ' => 'B', 'Ƀ' => 'B', 'Ƃ' => 'B', 'Ć' => 'C', 'Č' => 'C', 'Ç' => 'C', 'Ḉ' => 'C', 'Ĉ' => 'C', 'Ċ' => 'C', 'Ƈ' => 'C', 'Ȼ' => 'C', 'Ď' => 'D', 'Ḑ' => 'D', 'Ḓ' => 'D', 'Ḋ' => 'D', 'Ḍ' => 'D', 'Ɗ' => 'D', 'Ḏ' => 'D', 'Dz' => 'D', 'Dž' => 'D', 'Đ' => 'D', 'Ð' => 'D', 'Ƌ' => 'D', 'DZ' => 'DZ', 'DŽ' => 'DZ', 'É' => 'E', 'Ĕ' => 'E', 'Ě' => 'E', 'Ȩ' => 'E', 'Ḝ' => 'E', 'Ê' => 'E', 'Ế' => 'E', 'Ệ' => 'E', 'Ề' => 'E', 'Ể' => 'E', 'Ễ' => 'E', 'Ḙ' => 'E', 'Ë' => 'E', 'Ė' => 'E', 'Ẹ' => 'E', 'Ȅ' => 'E', 'È' => 'E', 'Ẻ' => 'E', 'Ȇ' => 'E', 'Ē' => 'E', 'Ḗ' => 'E', 'Ḕ' => 'E', 'Ę' => 'E', 'Ɇ' => 'E', 'Ẽ' => 'E', 'Ḛ' => 'E', 'Ꝫ' => 'ET', 'Ḟ' => 'F', 'Ƒ' => 'F', 'Ǵ' => 'G', 'Ğ' => 'G', 'Ǧ' => 'G', 'Ģ' => 'G', 'Ĝ' => 'G', 'Ġ' => 'G', 'Ɠ' => 'G', 'Ḡ' => 'G', 'Ǥ' => 'G', 'Ḫ' => 'H', 'Ȟ' => 'H', 'Ḩ' => 'H', 'Ĥ' => 'H', 'Ⱨ' => 'H', 'Ḧ' => 'H', 'Ḣ' => 'H', 'Ḥ' => 'H', 'Ħ' => 'H', 'Í' => 'I', 'Ĭ' => 'I', 'Ǐ' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ḯ' => 'I', 'İ' => 'I', 'Ị' => 'I', 'Ȉ' => 'I', 'Ì' => 'I', 'Ỉ' => 'I', 'Ȋ' => 'I', 'Ī' => 'I', 'Į' => 'I', 'Ɨ' => 'I', 'Ĩ' => 'I', 'Ḭ' => 'I', 'І' => 'I', 'Ꝺ' => 'D', 'Ꝼ' => 'F', 'Ᵹ' => 'G', 'Ꞃ' => 'R', 'Ꞅ' => 'S', 'Ꞇ' => 'T', 'Ꝭ' => 'IS', 'Ĵ' => 'J', 'Ɉ' => 'J', 'Ḱ' => 'K', 'Ǩ' => 'K', 'Ķ' => 'K', 'Ⱪ' => 'K', 'Ꝃ' => 'K', 'Ḳ' => 'K', 'Ƙ' => 'K', 'Ḵ' => 'K', 'Ꝁ' => 'K', 'Ꝅ' => 'K', 'Ĺ' => 'L', 'Ƚ' => 'L', 'Ľ' => 'L', 'Ļ' => 'L', 'Ḽ' => 'L', 'Ḷ' => 'L', 'Ḹ' => 'L', 'Ⱡ' => 'L', 'Ꝉ' => 'L', 'Ḻ' => 'L', 'Ŀ' => 'L', 'Ɫ' => 'L', 'Lj' => 'L', 'Ł' => 'L', 'LJ' => 'LJ', 'Ḿ' => 'M', 'Ṁ' => 'M', 'Ṃ' => 'M', 'Ɱ' => 'M', 'Ń' => 'N', 'Ň' => 'N', 'Ņ' => 'N', 'Ṋ' => 'N', 'Ṅ' => 'N', 'Ṇ' => 'N', 'Ǹ' => 'N', 'Ɲ' => 'N', 'Ṉ' => 'N', 'Ƞ' => 'N', 'Nj' => 'N', 'Ñ' => 'N', 'NJ' => 'NJ', 'Ó' => 'O', 'Ŏ' => 'O', 'Ǒ' => 'O', 'Ô' => 'O', 'Ố' => 'O', 'Ộ' => 'O', 'Ồ' => 'O', 'Ổ' => 'O', 'Ỗ' => 'O', 'Ö' => 'O', 'Ȫ' => 'O', 'Ȯ' => 'O', 'Ȱ' => 'O', 'Ọ' => 'O', 'Ő' => 'O', 'Ȍ' => 'O', 'Ò' => 'O', 'Ỏ' => 'O', 'Ơ' => 'O', 'Ớ' => 'O', 'Ợ' => 'O', 'Ờ' => 'O', 'Ở' => 'O', 'Ỡ' => 'O', 'Ȏ' => 'O', 'Ꝋ' => 'O', 'Ꝍ' => 'O', 'Ō' => 'O', 'Ṓ' => 'O', 'Ṑ' => 'O', 'Ɵ' => 'O', 'Ǫ' => 'O', 'Ǭ' => 'O', 'Ø' => 'O', 'Ǿ' => 'O', 'Õ' => 'O', 'Ṍ' => 'O', 'Ṏ' => 'O', 'Ȭ' => 'O', 'Ƣ' => 'OI', 'Ꝏ' => 'OO', 'Ɛ' => 'E', 'Ɔ' => 'O', 'Ȣ' => 'OU', 'Ṕ' => 'P', 'Ṗ' => 'P', 'Ꝓ' => 'P', 'Ƥ' => 'P', 'Ꝕ' => 'P', 'Ᵽ' => 'P', 'Ꝑ' => 'P', 'Ꝙ' => 'Q', 'Ꝗ' => 'Q', 'Ŕ' => 'R', 'Ř' => 'R', 'Ŗ' => 'R', 'Ṙ' => 'R', 'Ṛ' => 'R', 'Ṝ' => 'R', 'Ȑ' => 'R', 'Ȓ' => 'R', 'Ṟ' => 'R', 'Ɍ' => 'R', 'Ɽ' => 'R', 'Ꜿ' => 'C', 'Ǝ' => 'E', 'Ś' => 'S', 'Ṥ' => 'S', 'Š' => 'S', 'Ṧ' => 'S', 'Ş' => 'S', 'Ŝ' => 'S', 'Ș' => 'S', 'Ṡ' => 'S', 'Ṣ' => 'S', 'Ṩ' => 'S', 'ß' => 'ss', 'Ť' => 'T', 'Ţ' => 'T', 'Ṱ' => 'T', 'Ț' => 'T', 'Ⱦ' => 'T', 'Ṫ' => 'T', 'Ṭ' => 'T', 'Ƭ' => 'T', 'Ṯ' => 'T', 'Ʈ' => 'T', 'Ŧ' => 'T', 'Ɐ' => 'A', 'Ꞁ' => 'L', 'Ɯ' => 'M', 'Ʌ' => 'V', 'Ꜩ' => 'TZ', 'Ú' => 'U', 'Ŭ' => 'U', 'Ǔ' => 'U', 'Û' => 'U', 'Ṷ' => 'U', 'Ü' => 'U', 'Ǘ' => 'U', 'Ǚ' => 'U', 'Ǜ' => 'U', 'Ǖ' => 'U', 'Ṳ' => 'U', 'Ụ' => 'U', 'Ű' => 'U', 'Ȕ' => 'U', 'Ù' => 'U', 'Ủ' => 'U', 'Ư' => 'U', 'Ứ' => 'U', 'Ự' => 'U', 'Ừ' => 'U', 'Ử' => 'U', 'Ữ' => 'U', 'Ȗ' => 'U', 'Ū' => 'U', 'Ṻ' => 'U', 'Ų' => 'U', 'Ů' => 'U', 'Ũ' => 'U', 'Ṹ' => 'U', 'Ṵ' => 'U', 'Ꝟ' => 'V', 'Ṿ' => 'V', 'Ʋ' => 'V', 'Ṽ' => 'V', 'Ꝡ' => 'VY', 'Ẃ' => 'W', 'Ŵ' => 'W', 'Ẅ' => 'W', 'Ẇ' => 'W', 'Ẉ' => 'W', 'Ẁ' => 'W', 'Ⱳ' => 'W', 'Ẍ' => 'X', 'Ẋ' => 'X', 'Ý' => 'Y', 'Ŷ' => 'Y', 'Ÿ' => 'Y', 'Ẏ' => 'Y', 'Ỵ' => 'Y', 'Ỳ' => 'Y', 'Ƴ' => 'Y', 'Ỷ' => 'Y', 'Ỿ' => 'Y', 'Ȳ' => 'Y', 'Ɏ' => 'Y', 'Ỹ' => 'Y', 'Ї' => 'YI', 'Ź' => 'Z', 'Ž' => 'Z', 'Ẑ' => 'Z', 'Ⱬ' => 'Z', 'Ż' => 'Z', 'Ẓ' => 'Z', 'Ȥ' => 'Z', 'Ẕ' => 'Z', 'Ƶ' => 'Z', 'Þ' => 'TH', 'IJ' => 'IJ', 'Œ' => 'OE', 'ᴀ' => 'A', 'ᴁ' => 'AE', 'ʙ' => 'B', 'ᴃ' => 'B', 'ᴄ' => 'C', 'ᴅ' => 'D', 'ᴇ' => 'E', 'ꜰ' => 'F', 'ɢ' => 'G', 'ʛ' => 'G', 'ʜ' => 'H', 'ɪ' => 'I', 'ʁ' => 'R', 'ᴊ' => 'J', 'ᴋ' => 'K', 'ʟ' => 'L', 'ᴌ' => 'L', 'ᴍ' => 'M', 'ɴ' => 'N', 'ᴏ' => 'O', 'ɶ' => 'OE', 'ᴐ' => 'O', 'ᴕ' => 'OU', 'ᴘ' => 'P', 'ʀ' => 'R', 'ᴎ' => 'N', 'ᴙ' => 'R', 'ꜱ' => 'S', 'ᴛ' => 'T', 'ⱻ' => 'E', 'ᴚ' => 'R', 'ᴜ' => 'U', 'ᴠ' => 'V', 'ᴡ' => 'W', 'ʏ' => 'Y', 'ᴢ' => 'Z', 'á' => 'a', 'ă' => 'a', 'ắ' => 'a', 'ặ' => 'a', 'ằ' => 'a', 'ẳ' => 'a', 'ẵ' => 'a', 'ǎ' => 'a', 'â' => 'a', 'ấ' => 'a', 'ậ' => 'a', 'ầ' => 'a', 'ẩ' => 'a', 'ẫ' => 'a', 'ä' => 'a', 'ǟ' => 'a', 'ȧ' => 'a', 'ǡ' => 'a', 'ạ' => 'a', 'ȁ' => 'a', 'à' => 'a', 'ả' => 'a', 'ȃ' => 'a', 'ā' => 'a', 'ą' => 'a', 'ᶏ' => 'a', 'ẚ' => 'a', 'å' => 'a', 'ǻ' => 'a', 'ḁ' => 'a', 'ⱥ' => 'a', 'ã' => 'a', 'ꜳ' => 'aa', 'æ' => 'ae', 'ǽ' => 'ae', 'ǣ' => 'ae', 'ꜵ' => 'ao', 'ꜷ' => 'au', 'ꜹ' => 'av', 'ꜻ' => 'av', 'ꜽ' => 'ay', 'ḃ' => 'b', 'ḅ' => 'b', 'ɓ' => 'b', 'ḇ' => 'b', 'ᵬ' => 'b', 'ᶀ' => 'b', 'ƀ' => 'b', 'ƃ' => 'b', 'ɵ' => 'o', 'ć' => 'c', 'č' => 'c', 'ç' => 'c', 'ḉ' => 'c', 'ĉ' => 'c', 'ɕ' => 'c', 'ċ' => 'c', 'ƈ' => 'c', 'ȼ' => 'c', 'ď' => 'd', 'ḑ' => 'd', 'ḓ' => 'd', 'ȡ' => 'd', 'ḋ' => 'd', 'ḍ' => 'd', 'ɗ' => 'd', 'ᶑ' => 'd', 'ḏ' => 'd', 'ᵭ' => 'd', 'ᶁ' => 'd', 'đ' => 'd', 'ɖ' => 'd', 'ƌ' => 'd', 'ð' => 'd', 'ı' => 'i', 'ȷ' => 'j', 'ɟ' => 'j', 'ʄ' => 'j', 'dz' => 'dz', 'dž' => 'dz', 'é' => 'e', 'ĕ' => 'e', 'ě' => 'e', 'ȩ' => 'e', 'ḝ' => 'e', 'ê' => 'e', 'ế' => 'e', 'ệ' => 'e', 'ề' => 'e', 'ể' => 'e', 'ễ' => 'e', 'ḙ' => 'e', 'ë' => 'e', 'ė' => 'e', 'ẹ' => 'e', 'ȅ' => 'e', 'è' => 'e', 'ẻ' => 'e', 'ȇ' => 'e', 'ē' => 'e', 'ḗ' => 'e', 'ḕ' => 'e', 'ⱸ' => 'e', 'ę' => 'e', 'ᶒ' => 'e', 'ɇ' => 'e', 'ẽ' => 'e', 'ḛ' => 'e', 'ꝫ' => 'et', 'ḟ' => 'f', 'ƒ' => 'f', 'ᵮ' => 'f', 'ᶂ' => 'f', 'ǵ' => 'g', 'ğ' => 'g', 'ǧ' => 'g', 'ģ' => 'g', 'ĝ' => 'g', 'ġ' => 'g', 'ɠ' => 'g', 'ḡ' => 'g', 'ᶃ' => 'g', 'ǥ' => 'g', 'ḫ' => 'h', 'ȟ' => 'h', 'ḩ' => 'h', 'ĥ' => 'h', 'ⱨ' => 'h', 'ḧ' => 'h', 'ḣ' => 'h', 'ḥ' => 'h', 'ɦ' => 'h', 'ẖ' => 'h', 'ħ' => 'h', 'ƕ' => 'hv', 'í' => 'i', 'ĭ' => 'i', 'ǐ' => 'i', 'î' => 'i', 'ï' => 'i', 'ḯ' => 'i', 'ị' => 'i', 'ȉ' => 'i', 'ì' => 'i', 'ỉ' => 'i', 'ȋ' => 'i', 'ī' => 'i', 'į' => 'i', 'ᶖ' => 'i', 'ɨ' => 'i', 'ĩ' => 'i', 'ḭ' => 'i', 'і' => 'i', 'ꝺ' => 'd', 'ꝼ' => 'f', 'ᵹ' => 'g', 'ꞃ' => 'r', 'ꞅ' => 's', 'ꞇ' => 't', 'ꝭ' => 'is', 'ǰ' => 'j', 'ĵ' => 'j', 'ʝ' => 'j', 'ɉ' => 'j', 'ḱ' => 'k', 'ǩ' => 'k', 'ķ' => 'k', 'ⱪ' => 'k', 'ꝃ' => 'k', 'ḳ' => 'k', 'ƙ' => 'k', 'ḵ' => 'k', 'ᶄ' => 'k', 'ꝁ' => 'k', 'ꝅ' => 'k', 'ĺ' => 'l', 'ƚ' => 'l', 'ɬ' => 'l', 'ľ' => 'l', 'ļ' => 'l', 'ḽ' => 'l', 'ȴ' => 'l', 'ḷ' => 'l', 'ḹ' => 'l', 'ⱡ' => 'l', 'ꝉ' => 'l', 'ḻ' => 'l', 'ŀ' => 'l', 'ɫ' => 'l', 'ᶅ' => 'l', 'ɭ' => 'l', 'ł' => 'l', 'lj' => 'lj', 'ſ' => 's', 'ẜ' => 's', 'ẛ' => 's', 'ẝ' => 's', 'ḿ' => 'm', 'ṁ' => 'm', 'ṃ' => 'm', 'ɱ' => 'm', 'ᵯ' => 'm', 'ᶆ' => 'm', 'ń' => 'n', 'ň' => 'n', 'ņ' => 'n', 'ṋ' => 'n', 'ȵ' => 'n', 'ṅ' => 'n', 'ṇ' => 'n', 'ǹ' => 'n', 'ɲ' => 'n', 'ṉ' => 'n', 'ƞ' => 'n', 'ᵰ' => 'n', 'ᶇ' => 'n', 'ɳ' => 'n', 'ñ' => 'n', 'nj' => 'nj', 'ó' => 'o', 'ŏ' => 'o', 'ǒ' => 'o', 'ô' => 'o', 'ố' => 'o', 'ộ' => 'o', 'ồ' => 'o', 'ổ' => 'o', 'ỗ' => 'o', 'ö' => 'o', 'ȫ' => 'o', 'ȯ' => 'o', 'ȱ' => 'o', 'ọ' => 'o', 'ő' => 'o', 'ȍ' => 'o', 'ò' => 'o', 'ỏ' => 'o', 'ơ' => 'o', 'ớ' => 'o', 'ợ' => 'o', 'ờ' => 'o', 'ở' => 'o', 'ỡ' => 'o', 'ȏ' => 'o', 'ꝋ' => 'o', 'ꝍ' => 'o', 'ⱺ' => 'o', 'ō' => 'o', 'ṓ' => 'o', 'ṑ' => 'o', 'ǫ' => 'o', 'ǭ' => 'o', 'ø' => 'o', 'ǿ' => 'o', 'õ' => 'o', 'ṍ' => 'o', 'ṏ' => 'o', 'ȭ' => 'o', 'ƣ' => 'oi', 'ꝏ' => 'oo', 'ɛ' => 'e', 'ᶓ' => 'e', 'ɔ' => 'o', 'ᶗ' => 'o', 'ȣ' => 'ou', 'ṕ' => 'p', 'ṗ' => 'p', 'ꝓ' => 'p', 'ƥ' => 'p', 'ᵱ' => 'p', 'ᶈ' => 'p', 'ꝕ' => 'p', 'ᵽ' => 'p', 'ꝑ' => 'p', 'ꝙ' => 'q', 'ʠ' => 'q', 'ɋ' => 'q', 'ꝗ' => 'q', 'ŕ' => 'r', 'ř' => 'r', 'ŗ' => 'r', 'ṙ' => 'r', 'ṛ' => 'r', 'ṝ' => 'r', 'ȑ' => 'r', 'ɾ' => 'r', 'ᵳ' => 'r', 'ȓ' => 'r', 'ṟ' => 'r', 'ɼ' => 'r', 'ᵲ' => 'r', 'ᶉ' => 'r', 'ɍ' => 'r', 'ɽ' => 'r', 'ↄ' => 'c', 'ꜿ' => 'c', 'ɘ' => 'e', 'ɿ' => 'r', 'ś' => 's', 'ṥ' => 's', 'š' => 's', 'ṧ' => 's', 'ş' => 's', 'ŝ' => 's', 'ș' => 's', 'ṡ' => 's', 'ṣ' => 's', 'ṩ' => 's', 'ʂ' => 's', 'ᵴ' => 's', 'ᶊ' => 's', 'ȿ' => 's', 'ɡ' => 'g', 'ᴑ' => 'o', 'ᴓ' => 'o', 'ᴝ' => 'u', 'ť' => 't', 'ţ' => 't', 'ṱ' => 't', 'ț' => 't', 'ȶ' => 't', 'ẗ' => 't', 'ⱦ' => 't', 'ṫ' => 't', 'ṭ' => 't', 'ƭ' => 't', 'ṯ' => 't', 'ᵵ' => 't', 'ƫ' => 't', 'ʈ' => 't', 'ŧ' => 't', 'ᵺ' => 'th', 'ɐ' => 'a', 'ᴂ' => 'ae', 'ǝ' => 'e', 'ᵷ' => 'g', 'ɥ' => 'h', 'ʮ' => 'h', 'ʯ' => 'h', 'ᴉ' => 'i', 'ʞ' => 'k', 'ꞁ' => 'l', 'ɯ' => 'm', 'ɰ' => 'm', 'ᴔ' => 'oe', 'ɹ' => 'r', 'ɻ' => 'r', 'ɺ' => 'r', 'ⱹ' => 'r', 'ʇ' => 't', 'ʌ' => 'v', 'ʍ' => 'w', 'ʎ' => 'y', 'ꜩ' => 'tz', 'ú' => 'u', 'ŭ' => 'u', 'ǔ' => 'u', 'û' => 'u', 'ṷ' => 'u', 'ü' => 'u', 'ǘ' => 'u', 'ǚ' => 'u', 'ǜ' => 'u', 'ǖ' => 'u', 'ṳ' => 'u', 'ụ' => 'u', 'ű' => 'u', 'ȕ' => 'u', 'ù' => 'u', 'ủ' => 'u', 'ư' => 'u', 'ứ' => 'u', 'ự' => 'u', 'ừ' => 'u', 'ử' => 'u', 'ữ' => 'u', 'ȗ' => 'u', 'ū' => 'u', 'ṻ' => 'u', 'ų' => 'u', 'ᶙ' => 'u', 'ů' => 'u', 'ũ' => 'u', 'ṹ' => 'u', 'ṵ' => 'u', 'ᵫ' => 'ue', 'ꝸ' => 'um', 'ⱴ' => 'v', 'ꝟ' => 'v', 'ṿ' => 'v', 'ʋ' => 'v', 'ᶌ' => 'v', 'ⱱ' => 'v', 'ṽ' => 'v', 'ꝡ' => 'vy', 'ẃ' => 'w', 'ŵ' => 'w', 'ẅ' => 'w', 'ẇ' => 'w', 'ẉ' => 'w', 'ẁ' => 'w', 'ⱳ' => 'w', 'ẘ' => 'w', 'ẍ' => 'x', 'ẋ' => 'x', 'ᶍ' => 'x', 'ý' => 'y', 'ŷ' => 'y', 'ÿ' => 'y', 'ẏ' => 'y', 'ỵ' => 'y', 'ỳ' => 'y', 'ƴ' => 'y', 'ỷ' => 'y', 'ỿ' => 'y', 'ȳ' => 'y', 'ẙ' => 'y', 'ɏ' => 'y', 'ỹ' => 'y', 'ї' => 'yi', 'ź' => 'z', 'ž' => 'z', 'ẑ' => 'z', 'ʑ' => 'z', 'ⱬ' => 'z', 'ż' => 'z', 'ẓ' => 'z', 'ȥ' => 'z', 'ẕ' => 'z', 'ᵶ' => 'z', 'ᶎ' => 'z', 'ʐ' => 'z', 'ƶ' => 'z', 'ɀ' => 'z', 'þ' => 'th', 'ff' => 'ff', 'ffi' => 'ffi', 'ffl' => 'ffl', 'fi' => 'fi', 'fl' => 'fl', 'ij' => 'ij', 'œ' => 'oe', 'st' => 'st', 'ₐ' => 'a', 'ₑ' => 'e', 'ᵢ' => 'i', 'ⱼ' => 'j', 'ₒ' => 'o', 'ᵣ' => 'r', 'ᵤ' => 'u', 'ᵥ' => 'v', 'ₓ' => 'x', 'Ё' => 'YO', 'Й' => 'I', 'Ц' => 'TS', 'У' => 'U', 'К' => 'K', 'Е' => 'E', 'Н' => 'N', 'Г' => 'G', 'Ґ' => 'G', 'Ш' => 'SH', 'Щ' => 'SCH', 'З' => 'Z', 'Х' => 'H', 'Ъ' => "'", 'ё' => 'yo', 'й' => 'i', 'ц' => 'ts', 'у' => 'u', 'к' => 'k', 'е' => 'e', 'н' => 'n', 'г' => 'g', 'ґ' => 'g', 'ш' => 'sh', 'щ' => 'sch', 'з' => 'z', 'х' => 'h', 'ъ' => "'", 'Ф' => 'F', 'Ы' => 'I', 'В' => 'V', 'А' => 'a', 'П' => 'P', 'Р' => 'R', 'О' => 'O', 'Л' => 'L', 'Д' => 'D', 'Ж' => 'ZH', 'Э' => 'E', 'ф' => 'f', 'ы' => 'i', 'в' => 'v', 'а' => 'a', 'п' => 'p', 'р' => 'r', 'о' => 'o', 'л' => 'l', 'д' => 'd', 'ж' => 'zh', 'э' => 'e', 'Я' => 'Ya', 'Ч' => 'CH', 'С' => 'S', 'М' => 'M', 'И' => 'I', 'Т' => 'T', 'Ь' => "'", 'Б' => 'B', 'Ю' => 'YU', 'я' => 'ya', 'ч' => 'ch', 'с' => 's', 'м' => 'm', 'и' => 'i', 'т' => 't', 'ь' => "'", 'б' => 'b', 'ю' => 'yu', ]; if (isset($chars[$matches[0]])) { return $chars[$matches[0]]; } return $matches[0]; }, $str ); } return $str; } /** * @param $data * @param $key * @param $result * @return void */ public function multiRequestByCarrier($data, $key, &$result) { } /** * @param $data * @param $key * @param $item * @return mixed */ public function extraRequestDataByCarrier($data, $key, $item) { return $data; } }