Есть ли какой-либо механизм Wiki, который поддерживает создание страницы по электронной почте?

В регулярном выражении вы можете «захватить» части согласованной строки с помощью (brackets); в этом случае вы захватываете (^|_) и ([a-z]) части матча. Они нумеруются начиная с 1, поэтому у вас есть обратные ссылки 1 и 2. Матч 0 - это вся строка с согласованием.

Модификатор /e принимает заменяющую строку и заменяет обратную косую черту с последующим номером ( например, \1) с соответствующей обратной ссылкой, но поскольку вы находитесь внутри строки, вам нужно избежать обратной косой черты, чтобы вы получили '\\1'. Затем он (эффективно) запускает eval, чтобы запустить результирующую строку, как если бы это был PHP-код (поэтому он устарел, потому что его легко использовать eval небезопасным способом).

Функция preg_replace_callback вместо этого выполняет функцию обратного вызова и передает ей массив, содержащий совпадающие обратные ссылки. Итак, где бы вы написали '\\1', вместо этого вы получите доступ к элементу 1 этого параметра - например. если у вас есть анонимная функция формы function($matches) { ... }, первая обратная ссылка - $matches[1] внутри этой функции.

Итак, аргумент /e в

'do_stuff(\\1) . "and" . do_stuff(\\2)'

может стать обратным вызовом

function($m) { return do_stuff($m[1]) . "and" . do_stuff($m[2]); }

. Или в вашем случае

'strtoupper("\\2")'

может стать

function($m) { return strtoupper($m[2]); }

Обратите внимание, что $m и $matches не являются волшебными именами, это просто имя параметра, которое я дал при объявлении моих функций обратного вызова. Кроме того, вам не нужно передавать анонимную функцию, это может быть имя функции в виде строки или что-то вроде формы array($object, $method), как с любым обратным вызовом в PHP , например

function stuffy_callback($things) {
    return do_stuff($things[1]) . "and" . do_stuff($things[2]);
}
$foo = preg_replace_callback('/([a-z]+) and ([a-z]+)/', 'stuffy_callback', 'fish and chips');

Как и в любой функции, вы не можете получить доступ к переменным вне вашего обратного вызова (из окружения) по умолчанию. При использовании анонимной функции вы можете использовать ключевое слово use для импорта переменных, которые вам нужны для доступа, , как описано в руководстве по PHP . например если старый аргумент был

'do_stuff(\\1, $foo)'

, тогда новый обратный вызов может выглядеть как

function($m) use ($foo) { return do_stuff($m[1], $foo); }

Gotchas

  • Использование preg_replace_callback - вместо модификатора /e в регулярном выражении, поэтому вам нужно удалить этот флаг из вашего аргумента «pattern». Таким образом, шаблон, подобный /blah(.*)blah/mei, станет /blah(.*)blah/mi.
  • Модификатор /e использовал внутри аргумента addslashes() вариант, поэтому некоторые замены использовали stripslashes() для его удаления; в большинстве случаев вы, вероятно, хотите удалить вызов stripslashes из вашего нового обратного вызова.

6
задан burning_LEGION 11 August 2012 в 15:43
поделиться

2 ответа

И Jotspot и MediaWiki позволяют Вам делать это. У последнего есть поддержка большого количества плагинов, из которых это - то. Форматом является по существу PageTitle@something. Jotspot является размещенным решением, где Вы получаете свой собственный адрес электронной почты, MediaWiki саморазмещается, и Вы даете ему почтовый ящик для контроля для поступления.

Статьи добавляются к страницам, если они уже существуют, или новая страница создается, если она не делает. Это действительно требует степени дисциплины для соглашений о присвоении имен, но является большим для CC'ing.

Мы используем MediaWiki здесь, и мне нравится он много. Это имеет те же дефекты как много других пакетов Wiki (например, трудный реорганизовать без orphaning страниц), но так же хорошо, если не лучше, чем другие пакеты Wiki я использовал.

3
ответ дан 17 December 2019 в 18:21
поделиться

Я не знаю, точно ли это, что Вы ищете, но я знаю многие из данных добавления поддержки продуктов 37 Сигналов по электронной почте. Я использую Высотный для отслеживания часть моей деловой переписки, и я могу к CC, или перешлите электронную почту к Высотному, и они добавляются к соответствующему контакту.

0
ответ дан 17 December 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: