PHP preg функции не разбирают html комментарии - PullRequest
1 голос
/ 30 ноября 2011

У меня проблема, которая возникает только на 1 конкретном сервере Linux. Это сервер CentOS 5.7 Apache 2.2 PHP 5.33 сзади только для записи.

У меня есть шаблонный класс PHP, который анализирует циклы из комментариев HTML в файлах шаблонов с помощью функций preg_. Файл примера:

    <!--if place-->
        {place}
    <!--else place-->
        Nothing
    <!--endif place-->

Это команда, которую я использую:

$found = preg_match("/(?i)<!--(if|begin) ([a-zA-Z0-9_.\->!%<>= ]+)-->/u", $template, $aTag, PREG_OFFSET_CAPTURE, $position);

Это должно дать мне ветку с именем "место".

В моей локальной и всех других средах он правильно анализирует ветвь if, только на этом сервере он не анализирует их и просто пропускает их в коде, что означает, что в моем случае он отображает как var {place}, так и строку Ничего.

Как я уже сказал, он работает на локальной машине Windows -> WampServer. Он работает на других машинах Linux, в том числе и на CENTOS.

Кажется, что этот компьютер не распознает теги комментариев HTML как пригодные для синтаксического анализа для сценария php. Это возможно?

Заранее спасибо. Любые предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Для всех, кто может столкнуться с этим также.

Это была версия PHP, скомпилированная plesk (5.3.3), которая имела библиотеку PCRE с 2006 года !!скомпилированный в него, который в основном игнорировал все HTML-теги при разборе!

Поэтому, когда у вас возникла эта проблема, что некоторые вещи анализируются, а другие нет, проверьте ваш phpinfo на дату расширения PCRE.

0 голосов
/ 30 ноября 2011

Вам нужно добавить модификатор "s" в ваше выражение, чтобы включить режим многострочного сопоставления:

"/(?i)<!--(if|begin) ([a-zA-Z0-9_.\->!%<>= ]+)-->/s"

, и я на 100% уверен, что вам не нужно использовать "u" вообще.*

...