Передача нескольких обратных слешей в аргументе функции не работает

это

echo date('g:iA \o\n D, M jS', strtotime('2018-02-23 07:42:22'));

повторяет это

7:42AM on Fri, Feb 23rd

но это

function dateformat($source, $format = "Y-m-d")
{
if(empty($source) || $source == '0000-00-00') return false;
$date = date($format, strtotime($source));
if(date('Y', strtotime($date)) == '1969' && strpos($source, '1969') === false) return false;
if(date('Y', strtotime($date)) == '1970' && strpos($source, '1970') === false) return false;
return $date;
}
echo dateformat('2018-02-23 07:42:22', 'g:iA \o\n D, M jS');

повторяет это

Хотя это

echo dateformat('2018-02-23 07:42:22', "g:iA \o\n D, M jS");

повторяет это

7:42AM o Fri, Feb 23rd

Другими словами, с одинарными кавычками я получаю возвращаемое значение false, В двойных кавычках аргумент функции передает \o правильно, но не \n,

Все виды различных тестов дают непредсказуемые результаты. Я думал, что это связано с \n будучи зарезервированным, поэтому я попытался \o\o просто чтобы проверить. Что вернулся false, в то время как \o\n прошел \o успешно.

Я использовал эту функцию в течение многих лет, и только сейчас заметил проблему, поэтому я подумал, что, возможно, это связано с моим недавним переключением с Dreamweaver в Visual Studio Code, но я взял эти тесты PHP Sandbox и получил те же результаты, так что это не проблема редактора кода.

Если нет решения (которое было бы моим первым предпочтением), есть ли хотя бы объяснение того, что вызывает такое поведение?

ОБНОВИТЬПодводя итог основной проблеме, я не могу передать более одного символа обратной косой черты в аргумент функции. Он вернет ложь, если я сделаю. Но все, что я хочу сделать, прекрасно работает в нативной функции даты php.

0

Решение

Для строки в одинарных кавычках экранированные символы являются буквальными \o\n и это, возвращает falseтак же, как и ваша функция:

$date = date($format, strtotime($source));

Для строки в двойных кавычках символы экранируются, однако \n является escape-последовательностью для новая линия и поэтому вы получаете перевод строки не n, Сделайте просмотр источника на странице, и вы увидите:

7:42AM o
Fri, Feb 23rd

Чтобы исправить это, используйте двойной выход:

"g:iA \o\\n D, M jS"
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector