Перейти к содержанию
Сайт в скором времени будет закрыт, спасибо что были с нами! ×

Экранирование спец. символов


HooLIGUN
 Поделиться

Рекомендуемые сообщения

Добрый день. Подскажите, как экранировать всякие символы в модуле Pages ?

Например есть $str = "{{qwert{{}}";

и при выводе в блоке <? echo $str; ?> 

страница выдает ошибку 

[[Block blockkey is throwing an error]]

Пробовал quotemeta и htmlspecialchars - не помогает

Раньше пользовался mysql_real_escape_string, но этот метод не актуален 

Ссылка на комментарий
Поделиться на другие сайты

Привет. 

{{  try{  }}
{{ } catch( \Exception $ex ){  }}
{{ } }}

В php это:

try{
} 
catch( \Exception $ex ){
}

 

Ссылка на комментарий
Поделиться на другие сайты

Кирилл Не работает, и это немного не то

Мне нужно, чтобы строка выводилась с любыми символами.

Может в IPS есть функция, которая обрабатывает, например, кривые ники юзеров?

 

Ссылка на комментарий
Поделиться на другие сайты

HooLIGUN для обработки чистого php в шаблонах, используется конструкция {expression=''};

Ссылка на комментарий
Поделиться на другие сайты
  • 2 месяца спустя...

К сожалению, решения так и не нашел.

Прилагаю полностью проблемный код, который можно протестировать.

Есть отдельная база, в ней таблица users со столбцами id и nick

2.png.f05f8c863af0e12248a637d3d6c08bf8.png

Создал блок с кодом и вставил в новую страницу (Приложение Pages)

$connection = \IPS\Db::i( 'external', array(
    'sql_host'        => 'localhost',
    'sql_user'        => 'user',
    'sql_pass'        => 'pass',
    'sql_database'    => 'db',
    'sql_port'        => 3306,
   # 'sql_socket'    => '/var/lib/mysql.sock',
    'sql_utf8mb4'    => true,
) );

try
{
	$data = $connection->select( '*', 'users','id = 2' )->first();
}
catch( \UnderflowException $e )
{
	\IPS\Output::i()->error( ' ID не найден', '404', 404, '' );
}

echo $data['nick'];

Так вот, если выбирать из базы id = 1 и id = 2 , то будет ошибка

1.png.a9a74089d71e74bd813aa8a6b2ba1c31.png

Если выбрать id = 3 (нормальный ник, без $ и {{}}) то всё ок, выводит ник.

Изменено пользователем HooLIGUN
Ссылка на комментарий
Поделиться на другие сайты

HooLIGUN данная ошибка должна быть записана в лог ошибок.

Ссылка на комментарий
Поделиться на другие сайты
7 минут назад, Кирилл сказал:

HooLIGUN данная ошибка должна быть записана в лог ошибок.

Ругается на символы {{}} {$} , воспринимаются как код в шаблоне

Ссылка на комментарий
Поделиться на другие сайты
30 минут назад, Кирилл сказал:

HooLIGUN данная ошибка должна быть записана в лог ошибок.

При выводе `id` = 1 такая ошибка

Screenshot_1.thumb.png.ff6e7ede8d25bd7a918b0389ef86ad78.png

При выводе `id` = 2 такая

Screenshot_2.thumb.png.c5646e8445ebe6299dca8e3045de7cc6.png

Ссылка на комментарий
Поделиться на другие сайты

Запрос должен выглядеть так:

$data = $connection->select( '*', 'users', array( 'id=?', 2 ) )->first();

 

Ссылка на комментарий
Поделиться на другие сайты
19 минут назад, Павел сказал:

Запрос должен выглядеть так:

$data = $connection->select( '*', 'users', array( 'id=?', 2 ) )->first();

 

Спасибо за дополнение. Набросал это на скорую руку, но так и так запрос выполняется.

Не работает сам результат, в котором есть символы вывода\обработки php в шаблонах {{$}}

Ссылка на комментарий
Поделиться на другие сайты
{{  try{  }}
{{$select = \IPS\Db::i()->select( 'nick', 'users', array( 'id=?', 2 )  )->first();}}
{{ } catch( \Exception $ex ){  }}
{{ } }}

{$select}

 

Ссылка на комментарий
Поделиться на другие сайты
24 минуты назад, Кирилл сказал:
{{  try{  }}
{{$select = \IPS\Db::i()->select( 'nick', 'users', array( 'id=?', 2 )  )->first();}}
{{ } catch( \Exception $ex ){  }}
{{ } }}

{$select}

 

Я использую "чистый" php в блоке приложения страницы. А этот пример ведь для использования в шаблонах.

Ссылка на комментарий
Поделиться на другие сайты

HooLIGUN Я такой режим не использую совсем, но что-то мне подсказывает, что это особенность такого типа блоков в IPS. 

Ссылка на комментарий
Поделиться на другие сайты

Пришлось использовать костыли..

function ips_fixname ($name)
{
	$name =  str_replace('{', '', $name);
	$name =  str_replace('}', '', $name);
	$name =  str_replace('$', '', $name);
	return $name;
}

Если вдруг у кого будут идеи лучше, прошу поделиться, буду рад услышать

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
 Поделиться

×
×
  • Создать...

Важная информация

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности