2013-09-19 2 views
1

Я пытаюсь закодировать массив в формате JSON, массив содержит хешированный пароль и соль, но по какой-то причине массив не получается закодированным, и я считаю, что он имеет отношение к символам в соли, все равно вокруг этого или я не могу JSON закодировать что-то, что содержит такие символы?Json encoding mcrypt_create_iv salt error

$options = [ 
      'cost' => 12, 
      'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
      ]; 

$salt = $options['salt']; 
$arr = array('password' => 1, 'salt' => $salt); 
echo json_encode($arr); 

ответ

0

Это потому, что ваша двоичная строка имеет (непреднамеренный) недопустимый UTF-8 внутри; чтобы сделать его действительным, вы можете кодировать строку, используя utf8_encode():

$arr = array('password' => 1, 'salt' => utf8_encode($salt)); 

Позже вы должны будете выполнить операцию в обратном направлении:

$options = json_decode('...', true); 
$salt = utf8_decode($options['salt']); 

Если вы не чувствуете себя комфортно с такой бинарной обработки, вы также можете выполнить текстовую кодировку, такую ​​как base64_encode(), которую вы можете позже декодировать, используя base64_decode():

$arr = array('password' => 1, 'salt' => base64_encode($salt));