瀏覽代碼

[php] escape $ in fields names (fixes #7230)

Alexander Kuzmenko 7 年之前
父節點
當前提交
5f055e0303
共有 3 個文件被更改,包括 20 次插入1 次删除
  1. 6 0
      extra/CHANGES.txt
  2. 6 1
      src/generators/genphp7.ml
  3. 8 0
      tests/unit/src/unit/issues/Issue7230.hx

+ 6 - 0
extra/CHANGES.txt

@@ -1,3 +1,9 @@
+XXXX-XX-XX:
+
+	Bugfixes:
+
+	php : Escape `$` in field names of anonymous objects (#7230)
+
 2018-06-12: 4.0.0-preview.4
 
 	New features:

+ 6 - 1
src/generators/genphp7.ml

@@ -1599,7 +1599,12 @@ class code_writer (ctx:Common.context) hx_type_path php_name =
 				| None ->
 					self#write_expr value_expr;
 				| Some key_str ->
-					self#write ("\"" ^ (String.escaped key_str) ^ "\" => ");
+					let key_str =
+						Str.global_replace (Str.regexp "\\$")
+						"\\$"
+						(String.escaped key_str)
+					in
+					self#write ("\"" ^ key_str ^ "\" => ");
 					self#write_expr value_expr
 			);
 			if separate_line then self#write ",\n"

+ 8 - 0
tests/unit/src/unit/issues/Issue7230.hx

@@ -0,0 +1,8 @@
+package unit.issues;
+
+class Issue7230 extends unit.Test {
+	function test() {
+		var data = {"$id": 123};
+		eq(123, Reflect.field(data, "$id"));
+	}
+}