[talks text=”
Smarty3.1.17をPHP7.1で動かしたところ、表題のエラーが発生。strposの第2引数は空文字にしないように、ということらしい。
“]
解決策
対象ファイル:
smarty / libs / sysplugins / smarty_internal_templatelexer.php
以下のソースコードを、
if ($this->smarty->auto_literal && ($this->mbstring_overload ? (mb_strpos(" \n\t\r",mb_substr($this->value,$this->ldel_length,1,'latin1'),0,'latin1') !== false) : (strpos(" \n\t\r",substr($this->value,$this->ldel_length,1)) !== false))) {
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
} else {
$this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
}
以下に変更する(全部で3か所あるはず)
$substr = $this->mbstring_overload ? mb_substr($this->value,$this->ldel_length,1,'latin1') : substr($this->value,$this->ldel_length,1);
if ($this->smarty->auto_literal && !empty($substr) && ($this->mbstring_overload ? (mb_strpos(" \n\t\r",$substr,0,'latin1') !== false) : (strpos(" \n\t\r",$substr) !== false))) {
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
} else {
$this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
}
おしまい。
コメント欄