[Phplib-trackers] [ phplib-Patches-480713 ] template.inc: Backslashes disappear
Brought to you by:
nhruby,
richardarcher
From: <no...@so...> - 2001-11-11 22:03:35
|
Patches item #480713, was opened at 2001-11-11 13:55 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=403613&aid=480713&group_id=31885 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Julian Ladisch (jula) Assigned to: Nobody/Anonymous (nobody) >Summary: template.inc: Backslashes disappear Initial Comment: Backslashes used in value strings of set_var() disappear. Example: $t = new Template(); $t->set_var("field", "\\\\"); // four escaped backslashes $t->set_var("area", "{field}"); $t->set_var("test", "{out}"); echo "field = " . $t->get_var("field"); echo ", area = " . $t->parse("out", "area"); echo ", test = " . $t->parse("out", "test"); Result is field = \\, area = \, test = \ It should be field = \\, area = \\, test = \\ Reason is preg_replace (pattern, replacement, subject). It needs preg_quote() for parameter pattern, which is already done, but also escaping of any backslash in parameter replacement, which is done for special cases (\[0-9], \[0-9]) only. The attached diff provides a patch for this. It is even faster because of using str_replace() instead of preg_replace(). This also fixes the following error: $t = new Template(); $t->set_var("foo", "\1 \1"); echo htmlspecialchars($t->get("foo")); Result is "\1 \1", it should be "\1 \1". ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=403613&aid=480713&group_id=31885 |