Intereting Posts
Как иметь eclipse разрешать php-классы в пространстве имен MongoDB \ BSON? Сообщение об ошибке Строгие стандарты: нестатический метод не следует называть статически в php Ссылка. Что означает эта ошибка в PHP? Обновить DOM с помощью jquery после вызова AJAX PHP: Разница b / w new self и новый объект () Сообщение об ошибке PHP GCM MismatchSenderId Не удается получить желаемый шаблон для моих массивов Как отправить запрос AJAX, когда пользователь уходит (закрывает) страницу? Как заставить мой класс появиться в автозаполнении Аптаны? Как отображать сообщение только на домашней странице joomla? «У этой учетной записи не хватает разрешений» DocuSign Проблема PHP с сертификатом SSL CA (права доступа к каналу?) ReCaptcha продолжает говорить им бота, никогда не преуспевает? извлечение идентификатора из таблицы mysql Magento – Невозможно переопределить цены на продукцию – Нарушение внешнего ключа не работает

Обеспечить читаемое человеком представление идентификатора?

В ответ на предыдущий вопрос, когда я попросил решение проблемы с нарушением, я пытаюсь найти способ выразить произвольный идентификатор «читаемым» способом.

Контекст: мы работаем с объектами (объектами модели домена из DDD ), которые имеют идентификатор . Этот идентификатор (сопоставленный с первичным ключом базы данных) может быть выражен как строка: '123' , 'ABC' .

Некоторые объекты могут иметь составную идентификацию , то есть состоящую из двух или более идентичных объектов: array('123','ABC') .

Иногда мы хотим напечатать этот идентификатор или использовать его в месте, где разрешена только одна строка (например, в значении HTML <option> ). Процесс должен быть предсказуемым и обратимым, т. Е. Не должно быть никакой двусмысленности в том, как вернуть его обратно в исходное состояние.

Когда мы хотим, чтобы человек читал эту личность , для целей отладки легче читать 123 , ABC или 123~ABC а не a:2:{i:0;s:3:"123";i:1;s:3:"ABC";} , поэтому мы не хотим использовать встроенные функции, такие как serialize() или json_encode() .

json_encode () выполняет довольно хорошую работу, но когда дело доходит до использования в HTML, где кавычки должны быть правильно закодированы, он становится совершенно нечитаемым:

 <option value="[&quot;123&quot;,&quot;ABC&quot;]"> 

Где мы могли бы использовать хороший формат, как этот:

 <option value="123~ABC"> 

При отправке формы HTML мы должны иметь возможность вернуть этот закодированный идентификатор в исходное состояние: array('123','ABC') для получения правильной сущности .

Наконец, совершенно приемлемо, что формат усложняется (по-человечески), если личность содержит другие символы, чем буквы и цифры.

Некоторые основные примеры:

'123' => '123'
'ABC' => 'ABC'
array('123','ABC') => '123~ABC' (просто идея)

'string with non-alphanumeric, even non-àscìì char$' => ?

Любое (более или менее сложное) представление допустимо для строк, содержащих другие символы. Полученная строка должна содержать только символы ASCII, даже если исходная строка содержит символы, отличные от ASCII. Весь процесс должен быть полностью обратимым.

Любая идея о том, как это сделать?

Основываясь на отзывах, которые вы дали в комментариях, я бы предположил, что вы кодируете атомы-идентификаторы с urlencode или rawurlencode

Затем вы можете создать атомный состав, используя двоеточия.

 class Identifier { static function encode(array $identifier) { return implode(', ', array_map('rawurlencode', $identifier)); } static function decode($identifier) { return array_map('rawurldecode', array_map('trim', explode(',', $identifier)) ); } } $identifier = array('111', 'abc'); var_dump($identifier); $encoded = Identifier::encode($identifier); var_dump($encoded); $decoded = Identifier::decode($encoded); var_dump($decoded); 
 str_replace( array('[',']','&quot;',',') , array('','','','~'), json_encode($stuff) ); 

Ваши вопросы совершенно вербальны и не объясняют, что вы действительно хотите достичь.

Вы можете использовать 2 специальных символа:

~ – разделитель

* – escape-символ (для выхода из разделителя или самого escape-символа)

Примеры:

 array('123','ABC') => 123~ABC array('12*3','A~BC') => 12**3~A*~BC 

Вы можете выбрать разные символы для разделителя и escape-символа. Если выбранные символы будут редко использоваться, строка обычно будет хорошо читаемой.