Это срабатывает до тех пор, пока не будет достигнут 13-й символ. Как только str_ireplace попадает в «массив» в «cy», str_ireplace перестает работать.
Существует ли ограничение на размер массива? Имейте в виду, если тип «abgf» я получаю «nots», но если я наберу «abgrf», когда я получу «заметки», я получаю «notrs». Сложил мой мозг не могу понять это.
$_cypher = array("n","o","p","q","r","s","t","u","v","w","x","y","z","a","b","c","d","e","f","g","h","i","j","k","l","m"); $_needle = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); $_decryptedText = str_ireplace($_cypher, $_needle, $_text); echo $_decryptedText;
Помогите?
Использовать strtr
Docs :
$_text = 'abgrf'; $translate = array_combine($_cypher, $_needle); $_decryptedText = strtr($_text, $translate); echo $_decryptedText; # notes
демонстрация
Но было ли что-то, что я делал неправильно?
Он заменит каждую пару, одну пару за другой на уже замененной строке. Поэтому, если вы замените персонажа, который вы снова замените, это может произойти:
r -> ee -> r abgrf -> notes -> notrs
Ваша электронная замена приходит после вашей r-замены.
Использовать str_rot13
Возьмите пик в документах для str_replace . А именно, следующая строка:
Поскольку str_replace () заменяет слева направо, он может заменить ранее вставленное значение при выполнении нескольких замен. См. Также примеры в этом документе.
Так он работает, как сказано. Он просто выполняет круговую замену (n -> a, затем a -> n).
хотя он кажется прямым rot13, если это не так, другой вариант – использовать strtr () . Вы предоставляете строку и массив пар замещения и возвращаете полученный результат назад.