Струнный к лету (1337) Говорят на PHP - PullRequest
2 голосов
/ 06 ноября 2010

Кто-нибудь знает, где я могу найти хорошую отправную точку для кодирования функции, которая будет принимать строку и преобразовывать ее в leet talk?

function stringToLeetSpeak($string) {
  // Logic

  return $leetString;
}

Ответы [ 4 ]

6 голосов
/ 06 ноября 2010

Вы можете использовать strtr для перевода определенных символов:

$output = strtr($str, 'let', '137');

Или используйте str_replace с массивами:

$output = str_replace(array('l','e','t'), array('1','3','7'), $str);

Этим вы также можете заменить строки, а не только отдельные символы:

$output = str_replace(array('hacker'), array('hax0r'), $str);
5 голосов
/ 06 ноября 2010

Это будет мой ход:

class Leetify
{
    private $english = array("a", "e", "s", "S", "A", "o", "O", "t", "l", "ph", "y", "H", "W", "M", "D", "V", "x"); 
    private $leet = array("4", "3", "z", "Z", "4", "0", "0", "+", "1", "f", "j", "|-|", "\\/\\/", "|\\/|", "|)", "\\/", "><");
    function encode($string)
    {
        $result = '';
        for ($i = 0; $i < strlen($string); $i++) 
        {
            $char = $string[$i];

            if (false !== ($pos = array_search($char, $this->english))) 
            {
                $char = $this->leet[$pos]; //Change the char to l33t.
            }
            $result .= $char;
        }
        return $result; 
    } 

    function decode($string) 
    {
        //just reverse the above.
    }
}

Пример малого использования:

$Leet = new Leet();
$new_leet_text = $Leet->encode("i want this text here to bee leetified xD");

Надеюсь, это поможет.

Примечания:

  • Это только для отдельных символов, "Невозможно преобразовать целые слова"
  • Это для демонстрации, и код может быть не идеальным.
  • Мой совет - исследовать строковые функции и массивы в PHP, а также создать индекс диапазона, чтобы вы могли комбинировать замену word + char, используя третий массив для хранения строковых значений и их смещений.
4 голосов
/ 06 ноября 2010

Сделать массив из 256 строк в виде латинского символа для таблицы L33t. Пройдите по строке, используя символьное значение ASCII в качестве индекса в вашем массиве. Заменить при необходимости.

РЕДАКТИРОВАТЬ: Использование строки, чтобы захватить понимание BoltClock, что некоторые переводы требуют нескольких символов.

1 голос
/ 23 сентября 2015

Я только что улучшил Leetify (производительность и т. Д.)

https://gist.github.com/romanitalian/04541ec4b621c0b6ca76 Leetify

/**
 * Class Leetify
 * Leetify::encode('leet'); // "133+"
 * Leetify::decode('133+'); // "leet"
 */
class Leetify
{
    private $string = '';
    private $english = array("a", "e", "s", "S", "A", "o", "O", "t", "l", "ph", "y", "H", "W", "M", "D", "V", "x");
    private $leet = array("4", "3", "z", "Z", "4", "0", "0", "+", "1", "f", "j", "|-|", "\\/\\/", "|\\/|", "|)", "\\/", "><");
    private static $inst = null;
    private static function getInstance() {
        if(is_null(self::$inst)) {
            self::$inst = new self();
        }
        return self::$inst;
    }
    private function run($isEncode = false) {
        $out = '';
        if($this->string) {
            $dict = $isEncode ? $this->english : $this->leet;
            $dict_ = $isEncode ? $this->leet : $this->english;
            $flippedDict = array_flip($dict); // for good performance
            for($i = 0; $i < strlen($this->string); $i++) {
                $char = $this->string[$i];
                $out .= isset($flippedDict[$char]) ? $dict_[$flippedDict[$char]] : $char;
            }
        }
        return $out;
    }
    public function setString($string) {
        $t = self::getInstance();
        $t->string = $string;
        return $t;
    }
    public static function encode($string) {
        return self::getInstance()->setString($string)->run(true);
    }
    public static function decode($string) {
        return self::getInstance()->setString($string)->run();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...