php.ini中带感叹号的转义超链接

php.ini中带感叹号的转义超链接,php,Php,我有一个配置文件,其中包含如下文本警告: warnings.1 = Please check the date 它们以HTML的形式呈现给用户。我需要嵌入一个超链接,如下所示: warnings.1 = <a href="http://foo.com/!FOO!/">check with foo</a> 警告。1= 我一辈子都想不出如何转义,以便parse_ini_file()可以读取它并按我想要的方式获取字符串。尝试使用,感叹号应按如下方式转义: urlencod

我有一个配置文件,其中包含如下文本警告:

warnings.1 = Please check the date
它们以HTML的形式呈现给用户。我需要嵌入一个超链接,如下所示:

warnings.1 = <a href="http://foo.com/!FOO!/">check with foo</a>
警告。1=
我一辈子都想不出如何转义,以便parse_ini_file()可以读取它并按我想要的方式获取字符串。

尝试使用,感叹号应按如下方式转义:

urlencode("foo.com/!FOO!/");
输出:

foo.com%2F%21FOO%21%2F
:

扫描器模式:

可以是INI\u SCANNER\u NORMAL(默认)或INI\u SCANNER\u RAW。如果提供了INI_SCANNER_RAW,则不会解析选项值

更改日志: 5.3.0增加了可选的扫描仪模式参数


如果你没上5.3,你就完了。或者您需要使用另一种实现,parse_ini_file不是PHP的唯一ini文件解析器。

我最终切换到Zend_Config_Xml,因为对于我们的开发人员来说,如何转义数据比尝试使用稍微奇怪的.ini语法要清楚得多


感谢大家的回答。

我最近遇到了一个类似的情况,经过一番思考,我得出结论,问题不在于所使用的函数或类,而在于使用本身。参数值,例如

<a href="http://foo.com/!FOO!/">check with foo</a>
这是因为参数值应该只包含绑定到更改的值(从一个实例到另一个实例)。在您的例子中,锚定标记最好留在html本身,而不是
.ini
配置文件中。这不仅使您的配置文件保持轻量级,而且还使其保持干净,因为HTML代码应该在HTML中,配置值应该在配置文件中


因此,是的,没有必要切换PHP版本或向
parse_ini_file
函数添加参数(因为这样做会对Zend_Config_ini类造成攻击,如果需要,最好作为官方补丁).

此警告与此链接有何关系?为了清晰起见,我对问题进行了编辑。我实际上使用了Zend_Config_Ini,但重现了parse_Ini文件的问题-我实际上没有使用5.3 yes,因此我想我需要查看其他选项。由于双引号中的href=”“属性,因此仍然存在问题。。
<a href="http://foo.com/!FOO!/">check with foo</a>
warnings.1.href = "http://foo.com/!FOO!/"
warnings.1.text = "check with foo"