2010-04-14 44 views
2

感叹号逃生超级链接我有一个配置文件,它需要文本警告类似如下:在php.ini中

warnings.1 = Please check the date 

这些被呈现给用户的HTML。我需要嵌入一个超链接如下所示:

warnings.1 = <a href="http://foo.com/!FOO!/">check with foo</a> 

我不能为我的生活弄清楚如何逃离这个使得parse_ini_file()可以读取它,并得到该字符串我想要的方式。

+0

此警告与此链接有关? – SilentGhost 2010-04-14 17:14:40

+0

为了清晰起见,我编辑了该问题。 – 2010-04-15 08:15:11

回答

0

使用urlencode尝试中,惊叹号应该被转义为这样:

urlencode("foo.com/!FOO!/"); 

输出:

foo.com%2F%21FOO%21%2F 
+1

由于处于双引号内的href =“”属性中,所以仍然存在问题。 – 2010-04-16 16:38:43

1

http://php.net/manual/en/function.parse-ini-file.php

array parse_ini_file(string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]]) 

scanner_mode:

可以是INI_SCANNER_NORMAL(默认)或INI_SCANNER_RAW。如果提供INI_SCANNER_RAW,则不会分析选项值。

变更日志: 5.3.0增加了可选的scanner_mode参数。

因此,如果你不在5.3,那么你就被搞砸了。或者您需要使用不同的实现,parse_ini_file不是PHP的唯一INI文件解析器。

+0

我实际上使用Zend_Config_Ini,但转载parse_ini_file的问题 - 我实际上并没有使用5.3是的,所以我想我需要看看其他选项。 – 2010-04-15 08:16:29

0

我已经结束了切换到Zend_Config_Xml,因为它对我们的开发人员来说如何转义数据比试图解决稍微奇怪的.ini语法更清晰。

感谢所有的答案。

0

我刚刚遇到了一个类似的场景,在经过一番思考之后,我得出的结论是,问题不在于函数或类正在使用,而是使用本身。如

<a href="http://foo.com/!FOO!/">check with foo</a> 

参数值会的方式,只有href的值为参数的值,可以更好地实现。例如:

warnings.1.href = "http://foo.com/!FOO!/" 
warnings.1.text = "check with foo" 

这是因为参数值应该只包含被更改的值(从实例到实例)。在你的情况下,定位标记最好留在html本身中,而不是在.ini配置文件中。这不仅使您的配置文件保持轻量级,而且由于HTML代码应该位于HTML中的音乐会和配置文件中的配置值相分离,因此它也保持清洁。

所以是的,没有必要切换PHP版本或将参数添加到parse_ini_file函数(因为这样做会对Zend_Config_Ini类进行破解,如果需要,这将更好地作为官方补丁来完成)。