Youtube URL tarzı sağlamalarının

4 Cevap php

Ben youtube url'lerin kullanılan bir tür gibi güzel ve kısa alfa nümerik sağlamalarının inşa öğrenmek için çalışıyorum.

Örnek: http://www.youtube.com/watch?v=rw71YOSXhpE

Nerede rw71YOSXhpE Video numarası 12834233 (örneğin) dönüştürmek olacaktır.

Bu tamsayılar bir tamsayı PHP tersine ve daha sonra bir veritabanına baktım olabilir.

Ben PHP aşağıdaki çalıştırmak ettik:

<?
$algoList = hash_algos( );

foreach( $algoList as $algoName )
{
    echo $algoName . ": " . hash( $algoName, 357892345234 ) . "\n";
}
?>

Ama bunların hiçbiri beklediğiniz af ötesinde karakterleri ile geri gelir. Youtube üst ve alt durumda bütün ingilizce alfabe var. Bunu yaptık nasıl herhangi bir fikir?

4 Cevap

Sen base_convert() 0-9 artı, az kullanan, tabanı 36 içine numara dönüştürmek, ve URL parametre harfe duyarlı değildir avantaja sahip olduğu için kullanabilirsiniz.

Sen başka bir baz, tam alfabesi kullanan biri için tamsayı dönüştürmek istiyorum. Base64 işe yarayabilir ama base64_encode () işlevi bir dize değil, bir tamsayı alır çünkü özgün tamsayı daha uzun dizeleri alacak.

Benim önerim şöyle base_convert () fonksiyonu kullanmak olacaktır:

$id = 12834233;
$hash = base_convert($id, 10, 36);

ve ters

$hash = '7n2yh'
$id = base_convert($hash, 36, 10);

Ancak bu sadece küçük harfleri az ve 0-9 kullanacaktır. Tüm üst ve alt harf kullanmak isterseniz (eğer sembolleri kullanmak durumunda veya daha yüksek) 62 tabanına dönüştürmek gerekir. Ancak bunu yapmak için kendi kod yazmak zorunda kalacak.

Edit: Gordon php bu great link base62 kodlaması işaret etti.

Ben benzer bir sorun vardı, ve sadece bu kendim için bir sınıf yazdım.

Dokümantasyon: http://www.hashids.org/php/

Sos: https://github.com/ivanakimov/hashids.php

Bu gibi kullanabilirsiniz:

require('lib/Hashids/Hashids.php');

$hashids = new Hashids\Hashids('salt value', 11);
$hash = $hashids->encrypt(12834233);

Rz0zlKZGg6g: Aşağıdaki $hash alacağı

Tuz değeri için kendi benzersiz bir dize sağlayın. Kodda 11 isteğe bağlıdır ve en az karma uzunluğu anlamına gelir. (Ayrıca, kurucusuna 3 param olarak kendi alfabe dize tanımlayabilirsiniz).

Bunu yapacağını hashinidecrypt için:

$numbers = $hashids->decrypt($hash);

Yani $numbers olacaktır: [12834233]

(Bu hashids şifreleyebilirsiniz çünkü / bir karma içine birkaç numara şifresini bir dizi var.)

EDIT:

  1. Doc web sitesi ve kod kaynağını hem de içerecek şekilde adresler değişti
  2. Ana lib güncelleştirmeleri ayarlamak için değiştirdi örnek kod (geçerli PHP lib sürümü 0.3.0 olan - lib iyileştirilmesi için tüm açık kaynak topluluğuna sayesinde)