Autor Zpráva
Chro
Profil
Zdravím,

řeším oříšek jak převádět v textu BBcode tag [map] na HTML tag <img> zajišťující zobrazení mapy pomocí služby Google Static Map.

Pro představu:
$text = 'Sejdeme se zde: [map]Praha, Karlův most[/map] v 16 hodin.';
//zde zpracování
$prevedeny_text = 'Sejdeme se zde: <img class="mapa" src="http://maps.google.com/maps/api/staticmap?center=Praha,Karluv+most&amp;size=400x400&amp;maptype=roadmap&amp;sensor=false" width="400" height="400" alt="Mapa: Praha, Karlův most"> v 16 hodin.';

Důležité je převedení textu do URL z
Praha, Karlův most
na
Praha,Karluv+most.
To znamená:
- odstranit z textu diakritiku
- mezeru (mezery) mezi slovy nahradit znakem +
- odstranit případnou mezeru (mezery) před a za znakem ,
- odstranit veškeré znaky kromě a-z A-Z 0-9 , + -

Předpokládám nutnost použití složitého regulárního výrazu. Bohužel, přiznám se, nejsem stále schopen pochopit fungování a zápis složitějších regulárů a dokázal bych to opět vyřešit jen funkcemi explode, implode, str_replace atp., což je fuj.

Prosím, zdržte se lamentování nad kohokoli neschopností či neznalostmi, řešte konstruktivně. Díky.
__construct
Profil
Chro:
dokázal bych to opět vyřešit jen funkcemi explode, implode, str_replace atp., což je fuj.
Čo je na tomto „fuj“ ??
$text = 'Sejdeme se zde: [map]Praha, Kralův Most[/map] v 16 hodin.';
preg_match('~\[map\](.+?)\[\/map\]~i',$text, $zhody); 
$polozky = preg_split('~,~',$zhody[1]); //rozdelíme obsah medzi [map] tagmi podľa čiarok
foreach($polozky as $polozka){
      $polozka = trim($polozka); //odstrámime medzery zo začiatku a konca
      $polozka = iconv("utf-8", "us-ascii//TRANSLIT", $polozka); // odstránime diakritiku
      $polozka = preg_replace('~\s~','+',$polozka); // nahradíme medzery pluskami
      $vysledok[] = $polozka;
}
$obrazok = '<img class="mapa" src="http://maps.google.com/maps/api/staticmap?center='.implode(',',$vysledok).'&amp;size=400x400&amp;maptype=roadmap&amp;sensor=false" width="400" height="400" alt="Mapa: '.$zhody[1].'">';
echo str_replace($zhody[0],$obrazok,$text);
Chro
Profil
__construct:
Na tvém řešení se mi nezdá nic fuj, na mém bylo fuj 26 řádků. Díky.

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:

0