【Smarty3】Warning: strpos(): Empty needle in ~ smarty_internal_templatelexer.phpの解決方法

この記事は最終更新から1年以上経過しています。内容が古くなっているかもしれません。。

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;
}

おしまい。

この記事はお役に立てましたか?

はい

ブログランキング・にほんブログ村へ

コメントを残す