2016-12-08 68 views
0

ALMOST找到解決方案here比較的Prestashop Smarty的TPL文件的話(西裏爾字母符號)

但是我能明白這{if $haystack1|strstr:"_thestring_"}Found!{/if}不工作與非拉丁符號...

問題:我需要檢查字符串 'терминалы' 在$ payment_method.desc變量 這裏存在一個Smarty的代碼

The Variable **$payment_method.desc** contain this text 'Оплата наличными через кассы и терминалы'):

{assign "desc" $payment_method.desc} 
{assign "var_1" "терминалы"} 
{if $desc|@mb_stristr:$var_1|@var_dump}Found!{/if} 
{if $desc|@mb_strstr:$var_1|@var_dump}Found!{/if} 
{if $desc|@strstr:$var_1|@var_dump}Found!{/if} 

如果使用拉丁符號,則相同的代碼工作。

+0

你好。你解決了這個問題嗎?有答案幫助你?問候 – PixelWeb

+0

NOP沒有解決......現在我使用骯髒的黑客只使用拉丁符號是類似於西里爾。我只比較單詞「терминалы」的一部分,所以「терм」是拉丁文中的相同字母... – qant

回答

1

Smarty var聲明使用PHP內部編碼。

您應該檢查編碼相關功能的最後一個參數mb_*。檢查:mb_strstr

這篇文章可以幫助你太:php case-insensitive comparison of russian characters

如果您確信字符串有您應該考慮的「Windows-1251」編碼轉換俄語字符。

任何PHP函數都可以從Smarty調用,所以你可以用它們全部測試。

祝你好運。

+0

我檢查如何可以嘗試將其他參數傳遞給Smarty函數。俄語在utf-8格式中看起來不錯,所以我不認爲從「Windows-1251」轉換將有助於... – qant

+0

您可以使用多個參數傳遞給smarty函數:像這樣:{$ value | escape:'htmlall ':' UTF-8' }。俄語可能「看起來」不錯,但比較時,字符不匹配。 – PixelWeb

+0

我從開始嘗試這一部分,{$ var:'htmlall':'UTF-8'} ...並沒有幫助。 – qant