Есть ли в PHP str_replace ограничение более 13 символов? - PullRequest
2 голосов
/ 14 октября 2011

Это работает до 13-го персонажа. Как только str_ireplace достигает "a" в cyper-массиве, str_ireplace перестает работать.

Есть ли предел размера массива? Имейте в виду, что если набрать «abgf», я получу «nots», но если я наберу «abgrf», когда я должен получить «notes», я получу «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;

Помощь

Ответы [ 4 ]

5 голосов
/ 14 октября 2011

Использование strtr Документы :

$_text = 'abgrf';

$translate = array_combine($_cypher, $_needle);

$_decryptedText = strtr($_text, $translate);

echo $_decryptedText; # notes

Демо


Но что-то я делал не так?

Он заменит каждую пару, одну пару за другой в уже замененной строке. Так что если вы замените символ, которого вы заменяете снова, это может произойти:

    r -> e   e -> r
abgrf -> notes -> notrs

Ваша электронная замена приходит после вашей r-замены.

2 голосов
/ 14 октября 2011

Возьмите пик в документах для str_replace . А именно следующая строка:

Поскольку str_replace () заменяет слева направо, он может заменить ранее вставленное значение при выполнении нескольких замен. Смотрите также примеры в этом документе.

Так что работает как сказано. Это просто круговая замена (n -> a, затем a -> n).

1 голос
/ 14 октября 2011

Использование str_rot13

0 голосов
/ 14 октября 2011

, хотя это выглядит как прямая гниль13, в противном случае можно использовать strtr () .Вы предоставляете строку и массив пар замены и получаете полученный перевод обратно.

...