Php 适当的解决方案

Php 适当的解决方案,php,character-encoding,fat-free-framework,Php,Character Encoding,Fat Free Framework,我在工作中使用F3(无脂肪框架)进行一个项目,偶然发现了一个我似乎找不到任何信息的问题。谷歌和F3官方文档都没有给我任何信息。也许我只是问错了问题。问题出在这里 我有一个数组,看起来像这样: (城市=>类型=>建筑) 我要做的是检查数组中的每个建筑,看看是否为其设置了相应的字典变量。我使用$f3->exists('dict_select_hus_arrayValue')进行检查,直到函数遇到一个带有字母“ä”的建筑为止。如果出现错误,它将抛出一个500错误,文本无效的配置单元键“dict_sel

我在工作中使用F3(无脂肪框架)进行一个项目,偶然发现了一个我似乎找不到任何信息的问题。谷歌和F3官方文档都没有给我任何信息。也许我只是问错了问题。问题出在这里

我有一个数组,看起来像这样: (城市=>类型=>建筑)

我要做的是检查数组中的每个建筑,看看是否为其设置了相应的字典变量。我使用
$f3->exists('dict_select_hus_arrayValue')
进行检查,直到函数遇到一个带有字母“ä”的建筑为止。如果出现错误,它将抛出一个500错误,文本
无效的配置单元键“dict_select_hus_Brännässlan”


我假设它与字符串的编码有关,但我在纯UTF-8环境中工作,F3应该能够处理它。是否有其他人遇到过这种情况,更重要的是,找到了解决问题的方法?

F3不允许将特定语言的字符用作配置单元中的键。我不确定这是有意的还是偶然的,但这个问题的根本原因在于
Base
类的
&ref
方法。您将在第244行附近找到一个
preg_match('/^\w+$/',$parts[0])
。在您的情况下,这将返回
false
,因为特定于语言的字符不在
\w


我的建议是要么包括您所使用的字符(您需要记住此修改,以防以后升级F3或因某种原因重置F3),要么在检查F3之前包含这些字符。

正如@george007所发现的,确实不允许配置单元密钥具有特殊字符。但这只适用于非常的第一个蜂巢键段
$part[0]
。可以自由地更深一层使用它。所以
city.Brännässlan
应该可以。只要把你的城市和口述条目放到更深的层次。i、 e:

$f3->set('places',$places)

语言文件:

dict.select_hus.Brännässlan = XY
dict.select_hus.Kairo = YZ
php:

一个NB来自

请记住:配置单元键区分大小写。此外,根配置单元键 根据以下允许字符检查有效性:[a-z a-z 0-9_ ]


exists
函数有什么功能?当发现字典字符串时,它返回true;当没有字典字符串时,它返回false;当字符串中有“ä”时,它会与500崩溃(我假设这不是设计的)。
dict.select_hus.Brännässlan = XY
dict.select_hus.Kairo = YZ
foreach ($f3->get('places') as $c_name => $city) {
  if ($f3->exists('dict.select_hus.'.$c_name)) {
    // it's there
  }
}