2011-10-14 4 views
2

이것은 13 번째 캐릭터가 공격을받을 때까지 작동합니다. str_ireplace가 cyper 배열에서 "a"에 도달하면 str_ireplace가 작동을 멈 춥니 다.PHP str_replace의 글자 수 제한이 13자를 초과합니까?

배열의 크기에 제한이 있습니까? "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; 

도움 말?

+1

http://php.net/manual/en/function.str-rot13.php – Brad

답변

5

사용 strtrDocs는 :

$_text = 'abgrf'; 

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

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

echo $_decryptedText; # notes 

Demo


하지만, 내가 잘못하고 있던 무언가가 있었다?

이미 교체 된 문자열에서 한 쌍씩, 각 쌍을 대체합니다. 당신은 당신이 다시 대체 문자를 대체한다면,이 발생할 수 있습니다 :

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

귀하의 전자 교환이 R-교체 후 제공됩니다.

+0

아. @ircmaxell이 말했듯이, 순환 교체를 수행합니다. str_rot13을 사용하는 것 이외에 다른 작업을 수행하는 방법이 있습니까? –

+0

@Firemarble :'strtr'로 쓰여 있습니다. 나는 예제를 추가했다. – hakre

1

사용 str_rot13

+0

감사합니다. 그러나 내가 잘못하고있는 것이 있었습니까? –

0

비록 이것이 그렇지 않다면 strtr()을 사용하는 것입니다. 문자열과 대체 쌍의 배열을 제공하고 결과 번역을 다시 얻습니다.

2

str_replace에 대한 문서를 확인하십시오. 즉, 다음 줄은

이므로 str_replace()는 왼쪽에서 오른쪽으로 바뀌므로 여러 번 대치 할 때 이전에 삽입 한 값을 바꿀 수 있습니다. 이 문서의 예도 참조하십시오.

이렇게 말한대로 작동합니다. 순환 대체 (n -> a, 다음 -> n)입니다.

관련 문제