Autor Zpráva
Sunucuu
Profil
Ahoj,

v knize od J. Vrány se nachází tento kód na zkrácení url, ale bohužel nefunguje.
Snažil jsem se tím prokousat, ale regulérní výrazy nejsou rozhodně má silná stránka. Dokázal by to někdo opravit? :)
Autora s tím nechci obtěžovat, jelikož nevím, jestli není chyba někde u mě...
Mělo by to zkrátit každou url, která je delší než 62 znaků (níže uvedená je a nic).

function shortenLinksCallback($match) {
    return "<a href='$match[0]'>" . preg_replace(
        '~(.{40}[a-z0-9]*.).{10,}([^a-z0-9;].*.{10,})~i',
        '\\1…\\2',
        $match[0]
    ) . "</a>";
}

/** Zvýraznění a zkrácení odkazů v prostém textu
* @param string
* @return string
*/
function shortenLinks($text) {
    static $chars = "][;#%&+./0-9:=?a-z_~-";
    return preg_replace_callback(
        "(\\bhttps?://[$chars]+\\.[$chars]*[][+/0-9=a-z_~;])i",
        'shortenLinksCallback',
        htmlSpecialChars($text)
    );
}

echo shortenLinks('http://google.com/?page=foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo');
Str4wberry
Profil
A znáš nějakou adresu obdobného tvaru, jako je ta, co testuješ?
Sunucuu
Profil
Str4wberry:
Bohužel jsem neporozuměl otázce...

Má to zkrátit všechny delší URl jak 62 znaků....

Takových URL je spousta...
Ta url, kterou jsem uvedl je samozřejmě pouze příklad...
Str4wberry
Profil
Tak sem nějakou tu z té spousty, na kterou zkrácení nezafunguje, pošli.
Sunucuu
Profil
Str4wberry:
Však jsem již psal dlouho url hned v úvodním postu... -> http://google.com/?page=foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo

Problém vyřešen zde: (nevím, jestli se může dávat link mimo fórum, pokud ne, tak se omlouvám)
http://www.jaknaweb.com/ukazuj.php?f=1&i=203161&t=203161

Řešení zde uvedeno již funguje bez problému. Hlouběji jsem to netestovat, ale už to zkracuje tak, jak má :)
Str4wberry
Profil
Já ti chtěl naznačit, že ošetřuješ nereálný stav. To řešení z odkazu sice tento nereálný stav ošetřuje, ale na běžných odkazech selhává.

Proč nereálný stav? Opravdu jsi někde viděl adresu, kde je cca 60 znakový slepenec jako v tvém případě? Reálná takto dlouhá adresa bude mít v sobě lomítka, spojovníky, podtržítka, ampersandy atd., s čímž právě počítá ten Vránovo regulární výraz.

Pokud ti i tento nereálný stav vadí, proveď v té callback funkci zkrácení pomocí substr, když je řetězec po nahrazení delší (strlen) než 62 znaků.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: