|
str_rot13
Perform the rot13 transform on a string
(PHP 4 >= 4.2.0, PHP 5)
Performs the ROT13 encoding on the str argument and returns the resulting string. The ROT13 encoding simply shifts every letter by 13 places in the alphabet while leaving non-alpha characters untouched. Encoding and decoding are done by the same function, passing an encoded string as argument will return the original version. 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 |