Я использую приведенный ниже код, чтобы просто декодировать, а затем повторно кодировать (относительно длинную) закодированную строку URL, никогда не изменяя содержимое строки:
<?php
$string = 'Data=%7B%22Data%22%3A%22%5B%7B%5C%22RoomId%5C%22%3A%5C%225241306%5C%22%2C%5C%22ControlName%5C%22%3A%5C%221%3A0%3Arate%5C%22%2C%5C%22Rate%5C%22%3A%5C%22RACK%20RATE%5C%22%2C%5C%22Allocation%5C%22%3A%5C%222%5C%22%2C%5C%22Status%5C%22%3A%5C%22a%5C%22%2C%5C%22MinStay%5C%22%3A%5C%221%5C%22%2C%5C%22ErrorControlId%5C%22%3A%5C%221%3A0%3Arate%5C%22%2C%5C%22AllocationDate%5C%22%3A%5C%2216%2F09%2F2013%2000%3A00%3A00%5C%22%7D%2C%7B%5C%22RoomId%5C%22%3A%5C%225241306%5C%22%2C%5C%22ControlName%5C%22%3A%5C%220%3A0%3Arate%5C%22%2C%5C%22Rate%5C%22%3A%5C%22RACK%20RATE%5C%22%2C%5C%22Allocation%5C%22%3A%5C%221%5C%22%2C%5C%22Status%5C%22%3A%5C%22a%5C%22%2C%5C%22MinStay%5C%22%3A%5C%221%5C%22%2C%5C%22ErrorControlId%5C%22%3A%5C%220%3A0%3Arate%5C%22%2C%5C%22AllocationDate%5C%22%3A%5C%2215%2F09%2F2013%2000%3A00%3A00%5C%22%7D%5D%22%2C%22IsWizard%22%3Afalse%2C%22InitialBindDate%22%3A%2215%2F09%2F13%22%2C%22EndBindDate%22%3A%2217%2F09%2F2013%22%7D';
echo $string;
$decoded = urldecode($string);
echo "<br><br>$decoded";
$encoded = urlencode($decoded);
echo "<br><br>$encoded";
?>
Исходная строка имеет длину 930 символов. После декодирования и перекодирования он сократился до 924 символов. Почему это происходит и как я могу предотвратить это?
РЕДАКТИРОВАТЬ:
Следует отметить, что если я декодирую $encoded как таковой:
$decodedTwo = urldecode($encoded);
echo "<br><br>$decodedTwo";
Затем я замечаю, что обе декодированные строки имеют одинаковую длину. Но мне нужно знать, почему исходная закодированная строка и перекодированная строка имеют разную длину и как я могу предотвратить это.