|
str_rot13
Perform the rot13 transform on a string
(PHP 4 >= 4.2.0, PHP 5)
Code Examples / Notes » str_rot13nick
This is recursive function to shift the component letters of a string left or right in the ascii table. I've left it simple as it suits my needs, but you may want to include error checking for a null string and also put bounds in place, or make it actually rotate around the whole character set rather than just shifting the string up or down. function asc_shift($string, $amount) { $key = substr($string, 0, 1); if(strlen($string)==1) { return chr(ord($key) + $amount); } else { return chr(ord($key) + $amount) . asc_shift(substr($string, 1, strlen($string)-1), $amount); } } For example: <?php echo asc_shift("TESTING12345@", 5); ?> shifts every character up 5 ascii positions, resulting in this string: YJXYNSL6789:E In reverse: <?php echo asc_shift("YJXYNSL6789:E", -5); ?> shifts every character down 5 ascii positions, resulting in this string: TESTING12345@ maximius
Perhaps someone will find this useful ;) <? function rotN($s, $n){ $s2 = ""; for($i = 0; $i < strlen($s); $i++){ $char2 = $char = ord($s{$i}); $cap = $char & 32; $char &= ~ $cap; $char = $char > 64 && $char < 123 ? (($char - 65 + $n) % 26 + 65) : $char; $char |= $cap; if($char < 65 && $char2 > 64 || ($char > 90 && $char < 97 && ($char2 < 91 || $char2 > 96))) $char += 26; else if($char > 122 && $char2 < 123) $char -= 52; if(strtoupper(chr($char2)) === chr($char2)) $char = strtoupper(chr($char)); else $char = strtolower(chr($char)); $s2 .= $char; } return $s2; } ?> It takes any string, $s, and any ROT value, $n. Just like str_rot13, it's both an encoder and decoder. To decode an encoded string, just pass -$n instead of $n. arwab
here's my rot function, it works anyway <?php /** * preforms the rotation algorithm on the passed in string */ function _rot( $str , $dist=13 ){ if( !is_numeric($dist) || $dist < 0){ $dist = 13; } $u_lower = 65; $u_upper = 90; $l_lower = 97; $l_upper = 122; $char_count = ($u_upper - $u_lower) +1; while( $dist > $char_count ){ $dist -= $char_count; } $newstr = ''; for( $i=0; $i<strlen($str); ++$i){ $c = ord($str[$i]); /* * Check if the character is within the bounds of our function (a-zA-z) * if not it gets tacked on to the string as is and we move on to the * next one. */ if( $c<$u_lower || $c>$l_upper || ( $c>$u_upper && $c <$l_lower ) ){ $newstr .= chr($c); continue; } $lower = ( $c<=$u_upper?$u_lower:$l_lower); $upper = ( $c<=$u_upper?$u_upper:$l_upper); $c += $dist; if( $c > $upper){ $c = (($c - $upper) + ($lower-1)); } $newstr .= chr($c); } return $newstr; } ?> electro
<?php /** * Rotate each string characters by n positions in ASCII table * To encode use positive n, to decode - negative. * With n = 13 (ROT13), encode and decode n can be positive. * * @param string $string * @param integer $n * @return string */ function rotate($string, $n) { $length = strlen($string); $result = ''; for($i = 0; $i < $length; $i++) { $ascii = ord($string{$i}); $rotated = $ascii; if ($ascii > 64 && $ascii < 91) { $rotated += $n; $rotated > 90 && $rotated += -90 + 64; $rotated < 65 && $rotated += -64 + 90; } elseif ($ascii > 96 && $ascii < 123) { $rotated += $n; $rotated > 122 && $rotated += -122 + 96; $rotated < 97 && $rotated += -96 + 122; } $result .= chr($rotated); } return $result; } $enc = rotate('string', 6); echo "Encoded: $enc<br/>\n"; echo 'Decoded: ' . rotate($enc, -6); ?> |
Change Languageaddcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string convert_uudecode convert_uuencode count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars_decode htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vfprintf vprintf vsprintf wordwrap |