1+ <?php
2+ /**
3+ * CodeIgniter
4+ *
5+ * An open source application development framework for PHP
6+ *
7+ * This content is released under the MIT License (MIT)
8+ *
9+ * Copyright (c) 2014-2018 British Columbia Institute of Technology
10+ *
11+ * Permission is hereby granted, free of charge, to any person obtaining a copy
12+ * of this software and associated documentation files (the "Software"), to deal
13+ * in the Software without restriction, including without limitation the rights
14+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15+ * copies of the Software, and to permit persons to whom the Software is
16+ * furnished to do so, subject to the following conditions:
17+ *
18+ * The above copyright notice and this permission notice shall be included in
19+ * all copies or substantial portions of the Software.
20+ *
21+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27+ * THE SOFTWARE.
28+ *
29+ * @package CodeIgniter
30+ * @author CodeIgniter Dev Team
31+ * @copyright 2014-2018 British Columbia Institute of Technology (https://bcit.ca/)
32+ * @license https://opensource.org/licenses/MIT MIT License
33+ * @link https://codeigniter.com
34+ * @since Version 1.0.0
35+ * @filesource
36+ */
37+ if ( ! function_exists ('xml_convert ' ))
38+ {
39+ /**
40+ * Convert Reserved XML characters to Entities
41+ *
42+ * @param string
43+ * @param bool
44+ * @return string
45+ */
46+ function xml_convert (string $ str , $ protect_all = FALSE ): string
47+ {
48+ $ temp = '__TEMP_AMPERSANDS__ ' ;
49+
50+ // Replace entities to temporary markers so that
51+ // ampersands won't get messed up
52+ $ str = preg_replace ('/&#(\d+);/ ' , $ temp .'\\1; ' , $ str );
53+
54+ if ($ protect_all === TRUE )
55+ {
56+ $ str = preg_replace ('/&(\w+);/ ' , $ temp .'\\1; ' , $ str );
57+ }
58+
59+ $ str = str_replace (
60+ ['& ' , '< ' , '> ' , '" ' , "' " , '- ' ],
61+ ['& ' , '< ' , '> ' , '" ' , '' ' , '- ' ],
62+ $ str
63+ );
64+
65+ // Decode the temp markers back to entities
66+ $ str = preg_replace ('/ ' .$ temp .'(\d+);/ ' , '&# \\1; ' , $ str );
67+
68+ if ($ protect_all === TRUE )
69+ {
70+ return preg_replace ('/ ' .$ temp .'(\w+);/ ' , '& \\1; ' , $ str );
71+ }
72+
73+ return $ str ;
74+ }
75+ }
0 commit comments