У нас есть огромная база данных, где пользователи могут создавать настраиваемые поля. Каждый символ UTF-8 допускается в своем имени. До нескольких недель go, когда они экспортировали свои данные в XML, только недопустимые символы, которые были у пользователей в их таблицах, были sla sh /
и пробелами
, и мы заменяли их символами подчеркивания.
Теперь я вижу, что некоторые пользователи, которым нужен экспорт в XML, используют в именах своих полей *
, !
... Так что если вместо имени их поля valid_name
указано, например, invalid*name!
, этот скрипт сломается.
Часть кода, используемая для определения имени тега:
$doc = new DOMDocument();
$elementName = is_numeric($key) ? (string)$name : (string)$key;
$elementName = str_replace(array('/', ' '), '_', trim($elementName));
$node = $doc->createElement($elementName); // here I get error "invalid character name"
Образец действительного XML:
<?xml version="1.0"?>
<rows total="621" page="1">
<row>
<valid_name>60E49542D19D16EDB633A40</valid_name>
....
Надеюсь пользователям не нужно видеть в имени их элемента !
, *
... Мне нужно знать, какие символы не допускаются в имени элемента, и я заменю их, вероятно, подчеркиванием, открываюсь также, если у вас есть лучшее предложение вместо замены их подчеркиванием.