Всем привет! Есть PHP код функции:
function strip_mq_gpc($arg)
{
if (get_magic_quotes_gpc())
{
$arg = str_replace('"',"'",$arg);
$arg = stripslashes($arg);
return $arg;
}
else
{
$arg = str_replace('"',"'",$arg);
return $arg;
}
}
и его использование
$conn = &ADONewConnection($DBTYPE);
$conn->PConnect($DBHOST, $DBUSER, $DBPASSWORD, $DBNAME);
@mysql_query("SET NAMES 'UTF8'");
$sql = "SELECT * from config";
$rsc = $conn->Execute($sql);
if($rsc){while(!$rsc->EOF)
{
$field = $rsc->fields['setting'];
$config[$field] = $rsc->fields['value'];
STemplate::assign($field, strip_mq_gpc($config[$field]));
@$rsc->MoveNext();
}}
в MySQL таблице:
CREATE TABLE IF NOT EXISTS `config` (
`setting` varchar(60) NOT NULL DEFAULT '',
`value` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
вопрос: как параметры в определении Smarty assign связаны с кавычками(',")
str_replace('"',"'",$arg);? Для чего их надо менять?
Вы говорите, что поля вставляются в шаблон следующим образом:
<meta name="keywords" content="{if $pagetitle ne ""}{$pagetitle},{/if}{if $metakeywords ne ""}{$metakeywords},{/if}{$site_name}" />
давайте упростим это немного, т.к. конструкция ne "" смысла не имеет.
<meta name="keywords" content="{if $pagetitle}{$pagetitle},{/if}{if $metakeywords}{$metakeywords},{/if}{$site_name}" />
Если опустить тот факт, что в целом meta keywords в современном мире вещь практически игнорируемая поисковиками, вернемся к факту, что слова могут быть как разделены запятыми, так и пробелами. Так что, можно вовсе убрать все эти {if}
<meta name="keywords" content="{$pagetitle} {$metakeywords} {$site_name}" />
Дак вот, давайте представим, что поле $site_name содержит значение ООО "Рога и Копыта", а остальные для примера пустые. Что мы получим при простой подстановке:
<meta name="keywords" content=" ООО "Рога и Копыта"" />
Что делает нашу разметку некорректной, а часть Рога и Копыта"" стала мусором.
Для этого ваш код с помощью нехитрого костыля заменяет двойные кавычки на одинарные, и удаляет слэши. В целом задача экранирования подобных вещей это задача представления. Так что у вас тут три очевидных пути:
Только вот решать это надо прямо там в шаблоне (на примере одной переменной):
<meta name="keywords" content="{$site_name|replace:'"':''}" />
<meta name="keywords" content="{$site_name|escape}" />
Смысла использовать кавычки в ключевых словах нет, так что этот вариант не привожу.
Модификаторы можно группировать, переменные тоже в целом можно объединить в строку, так что при подозрении, что контент надо экранировать и удалять кавычки, все это вы можете свести к такой конструкции:
<meta name="keywords" content="{"$pagetitle $keywords $site_name"|replace:'"':""|escape}" />
или просто экранируются по отдельности
<meta name="keywords" content="{$pagetitle|escape} {$keywords|escape} {$site_name|escape}" />
всяческие вызовы strip_mq_gpc из кода удаляются за ненужностью.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости