Определенное поведение языков представляется различным.
For Perl:
Если операнды бинарной побитового цит являются строками разных размеров, | и^опс действовать, как если бы короче операнд имел дополнительные нулевые биты на правой
PHP documentation не кажется, чтобы определить, что происходит в этом случае, но один из примеров дает его прочь:
echo "12"^"9"; // Outputs the Backspace character (ascii 8)
// ('1' (ascii 49))^('9' (ascii 57)) = #8
Итак, похоже, что в PHP дополнительные символы в более длинной строке будут отброшены, а в Perl они будут включены.
Update:
Чтобы получить желаемое поведение в PHP, есть несколько вариантов. Вы можете добавить нулевые символы в конец строки.
$password = ' ';
$newchal = "abcdefghijklmnop";
#prints ABCDEFGH
echo $password^$newchal;
$password .= "\0\0\0\0\0\0\0\0";
#prints ABCDEFGHijklmnop
echo $password^$newchal;
В этом примере предполагается, что строки всегда являются фиксированной известной длиной. Если вам нужно обрабатывать произвольные случаи, вы можете измерить длину каждой строки, а затем добавить нулевые символы по мере необходимости. И, конечно, если вы не хотите изменять исходную переменную, поместите ее во временную переменную, прежде чем делать это.
ли обе переменные строки? – Rizier123
Да! Обе переменные - это строки. – Buboon
Что такое ** точный вывод **: var_dump ($ password); 'и' var_dump ($ newchal); '? – Rizier123