formtools.org preg_replace /e
Мне нужно установить formtools.org
на нескольких доменах, но из-за его использования preg_replace()
моя хостинговая компания не допустит этого. Я искал их форумы не случайно (я не могу получить доступ, чтобы задать вопрос)
Я полагаю, если следующее может быть переписано с помощью preg_replace_callback()
это решило бы все мои проблемы.
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
Любая помощь будет принята с благодарностью!
1 ответ
Если служба не поддерживает preg_replace()
Я был бы удивлен, если это поддерживает preg_replace_callback()
(поскольку они по сути одинаковы). Однако, если проблема связана с устаревшим e
модификатор, preg_replace_callback()
поможет.
С помощью preg_replace_callback()
очень просто, второй параметр - это вызываемая функция для создания заменяющего текста. Эта функция принимает один параметр, который является массивом групп этого совпадения. Так reset($matches)
в моем ответе похоже на \\0
в вашем примере. Попробуй это:
$source_content = preg_replace_callback(
$search,
function($matches) {
$match = reset($matches);
$count = substr_count($match, "\n");
$string = "'" . $this->_quote_replace($this->left_delimiter) . "php'";
$string .= str_repeat("\n", $count);
$string .= "'" . $this->_quote_replace($this->right_delimiter) . "'";
return $string;
},
$source_content
);
Примечание: поскольку у меня нет самого простого способа проверить это без составления ваших функций, выражений и $source_content
Это просто переводится с нуля. Если у вас есть какие-либо ошибки, пожалуйста, прокомментируйте (вместо понижения), и я смогу их исправить:)