Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как исправить ошибку из-за символа ' в заголовке?

Как исправить ошибку из-за символа ' в заголовке?


     03.09.2015    Все вопросы » Общие вопросы по PHP    2351

вопрос
Есть модуль последних комментариев (код ниже) в котором выводятся последние комменты и заголовки статей, в которых эти коменты были оставленны. Проблема в том, что если в заголовке публикации присутствует символ ' и пользователь к ней оставляет комментарий, то в модуле возникает критическая ошибка:


Parse error: syntax error, unexpected '', '' (T_CONSTANT_ENCAPSED_STRING) in /public_html/engine/modules/last_comments.php(125) : regexp code on line 1 Fatal error: preg_replace(): Failed evaluating code: trimming( '???µN?N‚?????°N? ????????N?N‚N? - ??N???N€?°???»N??µ?? ??N????±??N? '', '35', ' ...' ) in /public_html/engine/modules/last_comments.php on line 125


Сама 125я строка, которая выводит заголовки:


if ( search( $tpl->copy_template, '{title=' ) !== false ) $tpl->copy_template = preg_replace ( "#\{title=([0-9]{0,3})\|?([^\}]+)?\}#ie", "trimming( '{$row['title']}', '\\1', '\\2' )", $tpl->copy_template );


Пробовал изменять эту строку, итога два - либо ошибка, либо вместо заголовка выводится {title=35 ...} - это всё равно, что удалить строку вовсе.

Подскажите, как решить эту проблему? Что можно сделать?

Сумасшедший код всего модуля:

Ответа пока нет


12 комментариев

LazyDev
PHP-developer

LazyDev - 3 сентября 2015 20:44 -

'{$row['title']}'
на
\"{$row['title']}\"
или
" . $row['title'] . "

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Dr.Riddle
Юзер

Dr.Riddle - 3 сентября 2015 20:52 -

\"{$row['title']}\"


Этот вариант работает, спасибо большое, ошибки больше нет

" . $row['title'] . "


А с этим ошибка

Dr.Riddle
Юзер

Dr.Riddle - 4 сентября 2015 09:35 -

\"{$row['title']}\"

Теперь другая проблема. С этим кодом возникает ошибка с символом "
Можно сделать что-то ещё?

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 11:26 -

Цитата: Dr.Riddle
" . $row['title'] . "
с этим какая ошибка ?

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 11:39 -

Замените весь тот код вывода заголовка по лимиту на этот :
if ( preg_match( "#\\{title limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
    $count= intval($matches[1]);
    $row['title'] = strip_tags( $row['title'] );
    if( $count AND dle_strlen( $row['title'], $config['charset'] ) > $count ) {
        $row['title'] = dle_substr( $row['title'], 0, $count, $config['charset'] );
        if( ($temp_dmax = dle_strrpos( $row['title'], ' ', $config['charset'] )) ) $row['title'] = dle_substr( $row['title'], 0, $temp_dmax, $config['charset'] );
    }
    $tpl->set( $matches[0], $row['title'] );
}

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Dr.Riddle
Юзер

Dr.Riddle - 4 сентября 2015 11:52 -

" . $row['title'] . "

Такая же, как и с изначальной строкой:
Parse error: syntax error, unexpected '', '' (T_CONSTANT_ENCAPSED_STRING) in /public_html/engine/modules/last_comments.php(125) : regexp code on line 1 Fatal error: preg_replace(): Failed evaluating code: trimming( '???µN?N‚?????°N? ????????N?N‚N? - ??N???N€?°???»N??µ?? ??N????±??N? '', '35', ' ...' ) in /public_html/engine/modules/last_comments.php on line 125 

Однако ошибка возникает как на символ ' так и на символ "

if ( preg_match( "#\\{title limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
    $count= intval($matches[1]);
    $row['title'] = strip_tags( $row['title'] );
    if( $count AND dle_strlen( $row['title'], $config['charset'] ) > $count ) {
        $row['title'] = dle_substr( $row['title'], 0, $count, $config['charset'] );
        if( ($temp_dmax = dle_strrpos( $row['title'], ' ', $config['charset'] )) ) $row['title'] = dle_substr( $row['title'], 0, $temp_dmax, $config['charset'] );
    }
    $tpl->set( $matches[0], $row['title'] );
}

С этим кодом не работает... {title=35 ...} вместо заголовков

Похоже модуль сам по себе кривоват

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 11:55 -

Dr.Riddle, потому что нужно писать так
{title limit="35"}

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Dr.Riddle
Юзер

Dr.Riddle - 4 сентября 2015 12:09 -

В строке вывода, я вроде так и написал, но всё равно {title=35 ...}
Если строку вывода удалить совсем, то тоже самое. Вместо заголовков {title=35 ...}

Или
{title limit="35"}

где-то в другом месте надо написать?

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 12:11 -

Dr.Riddle, замените на тот код что я написал и в файле шаблона вместо
{title=35}
писать
{title limit="35"}

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Dr.Riddle
Юзер

Dr.Riddle - 4 сентября 2015 12:24 -

Да, теперь всё работает,
спасибо за помощь!

Sander
PHP-developer

Sander - 4 сентября 2015 13:07 -

А можно было просто перед кодом добавить:
$row['title'] = $db->safesql($row['title']);

Ну или по колхозному:
$row['title'] = str_replace("'","\'",$row['title']);

Экранирование-с.

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Dr.Riddle
Юзер

Dr.Riddle - 4 сентября 2015 17:29 -

Sander,
Так тоже работает, спасибо

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх