PHP try-catch неэффективен для функции mb_convert_encoding()Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP try-catch неэффективен для функции mb_convert_encoding()

Сообщение Anonymous »

У меня есть следующий код в PHP-скрипте CLI. (Значение в $mime_encoded_text на самом деле берется из заголовка сообщения, но для ясности я здесь упростил):

Код: Выделить всё

$mime_encoded_text = "This viral =?x-unknown?B?4oCYdmFuaWxsYSBsYXR0ZeKAmQ==?= hack is slimming waistlines" ;

$decodedElements = imap_mime_header_decode($mime_encoded_text);
$decodedString = '';
foreach ($decodedElements as $element) {
// Convert the text to UTF-8 from its original charset, if necessary
if (strtolower($element->charset) != 'utf-8' && $element->charset != 'default') {
try {
$decodedString .= mb_convert_encoding($element->text, 'UTF-8', $element->charset);
} catch (exception $e) {
printf("'%s' trying to decode '%s'\n", $e->getMessage(), $mime_encoded_text) ;
}
} else {
$decodedString .= $element->text;
}
}
Когда я запускаю этот код, я получаю:

Код: Выделить всё

PHP Fatal error:  Uncaught ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "x-unknown" in /home/dennis/x:14
Stack trace:
#0 /home/dennis/x(14): mb_convert_encoding()
#1 {main}
thrown in /home/dennis/x on line 14

> php --version
PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
Это не удается в строке mb_convert_encoding, что делает попытку {} catch {} неэффективной.
Как я могу перехватить это сообщение, чтобы избежать сбоя сценария?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... g-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»