Я установил mediawiki (1.19.2) с quercus (4.0.25) на Tomcat 7. Процесс установки прошел хорошо, ошибок или предупреждений не было, соединение с базой данных в порядке, и в конце процесса установки я скопировал файл LocalSettings.php в базовую папку mediawiki по мере необходимости.
С этого момента я несколько раз получал следующее предупреждение php поверх каждой страницы mediawiki:
webapps\mediawiki\includes\Message.php:388: Warning: function 'htmlspecialchars' called with 4 arguments, but only expects 3 arguments [htmlspecialchars]
Message.php:
365:/**
366: * Returns the message parsed from wikitext to HTML.
367: * @return String: HTML
368: */
369:public function toString() {
370: $string = $this->getMessageText();
371:
372: # Replace parameters before text parsing
373: $string = $this->replaceParameters( $string, 'before' );
374:
375: # Maybe transform using the full parser
376: if( $this->format === 'parse' ) {
377: $string = $this->parseText( $string );
378: $m = array();
379: if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
380: $string = $m[1];
381: }
382: } elseif( $this->format === 'block-parse' ){
383: $string = $this->parseText( $string );
384: } elseif( $this->format === 'text' ){
385: $string = $this->transformText( $string );
386: } elseif( $this->format === 'escaped' ){
387: $string = $this->transformText( $string );
388: $string = htmlspecialchars( $string, ENT_QUOTES, 'UTF-8', false );
389: }
390:
391: # Raw parameter replacement
392: $string = $this->replaceParameters( $string, 'after' );
393:
394: return $string;
395:}
Может ли кто-нибудь сказать мне, является ли это серьезным предупреждением или может быть конфликт версий (последняя версия mediawiki не работает с quercus)?
Может ли это предупреждение появиться из-за неправильной кодировки (я выбрал utf-8 в настройке)?
Если решения нет, есть ли способ избавиться от этого специального предупреждения (кажется, mediawiki работает нормально, насколько я могу судить)?
Согласно Руководство по PHP, htmlspecialchars делает взять 4 параметра, 3 из которых необязательны.
Это говорит о том, что Quercus - неполная реализация PHP.
Предупреждение в PHP обычно указывает, что он будет продолжать работу и делать все возможное. Предположительно, в этом случае он будет вести себя так, как если бы было установлено значение true, и, следовательно, он будет дважды кодировать любые существующие объекты.
Если для четвертого параметра в строке 388 (и во всех других местах, где эта функция вызывается с четырьмя параметрами) установлено значение true, это предупреждение можно игнорировать.
Если для него установлено значение false (и теперь, когда код в вашем вопросе, я вижу, что это является), вы, скорее всего, получите объекты с двойной кодировкой в html вики. Это может вызвать проблемы с отображением и потенциально неработающие ссылки.
На мой взгляд, более насущный вопрос: как неполный это Quercus? Сколько других функций не работают так же, как ванильный PHP?
Если это общедоступно, могут возникнуть проблемы безопасности с неполными функциями (эквивалентная проблема в htmlspecialchars_decode()
может разрешить XSS, например.)
Что касается того, как устранить предупреждение, правильным способом будет поднять отчет об ошибке с Caucho и обновите, как только они это исправят.