« Idézőjelek »

Ha valaki esetleg arra vetemedne, hogy PHP és reguláris kifejezés segítségével szeretné az ilyen " idézőjeleket „ ilyenné varázsolni, annak ajánlanám figyelmébe az alábbi kis kódocskát:

function niceQuotes($s){
  return preg_replace('#( |^)"(.*?)"( |$)#',' „\\2” ',$s);
}

Ez ugye annyit tesz, hogy ahol az idézőjel előtt és után egy szóköz áll, vagy ahol az idézőjel a tárgyszöveg első és utolsó karaktere, ott lecseréli az idézőjelt a másik verzióra. Ezt természetesen meg lehetne oldani a hagyományos str_replace();-szel, de akkor a minden HTML-elem beírásakor problémánk lenne, hiszen egy hasonló eredménnyel találkoznánk:

<a href=„http://mefi.be”>mefi</a>

Ez pedig nem lenne jó nekünk, ugye.

Kommentek RSS ikon
A bejegyzéshez érkezett kommentek, amiket RSS csatornán is követhetsz.
Kár hogy a freeblogon nem lehet php-t futtatni :(…
Nem értek a php-hoz, de ezt spec. nagyon is megértettem :)
atee: ott viszont meg tudod oldani javascripttel, bár ha az IE-t használókkal nem törődsz, akkor a CSS is megteszi.

Mefikém, az a returnös kód kicsit kilóg oldalra. (-;
Jé, most már jó lett. ((-:
Ez jó, köszi szépen! :)
atee: kiegészítem majd egy JavaScript és CSS aprósággal is. :)

axes: akkor megérte. :)

Balázs: már jobb, időközben kapott egy overflow: auto; -t ;]

Dani: nincsen mit. :)
hehe, éppen pénteken hackoltam egy hasonlót én is össze. Jó dolog ez a PHP :)
De ha <q>-val csinálsz idézőjeleket, akkor biza ki lehet cserélni sima str_replace-szel is.
lippije: jó biza :)

tiny: Akkor sem igazándiból. Tudniillik azt mondod, hogy a
-t cseréled a „-ra, míg a
-t az ”-ra. De az meg nem szép. Megoldható persze, de azért ez szebb. (Egyébként itt CSS-sel van.)
Mefi:Szép, vagy nem szép, a végeredmény ugyanaz, de a kódod egyszerűbb.
Nem tetszik a megoldás, mert egyrészt determinálja, hogy ezek szerint csak a magyar helyesírásnak megfelelő írásaid lehetnek (egy angol vagy francia nyelvű szövegben ezek az idézőjelek helytelenek), továbbá felesleges overload-ot tesz az egyes lapletöltésekre. Kompromisszumos megoldás CSS-sel játszani, praktikus pedig kézzel az adott környezetnek megfelelő idézőjelet kézzel felvinni.

Mindezeken felül a közölt kód némileg bugos, egy "blabla"-bla kifejezést nem bír el. Ragaszkodván ehhez a megoldáshoz, a PHP strip_tags() függvényével tagektől mentesítjük a tartalmat, majd utána egy mezei str_replace() is megteszi, ez talán gyorsabb, mint egy bonyolultabb regexp, ami az extrém finomságokra is ügyel.
Gábor: viszont ha a strip_tags() segítségével tagtelenítek, valamilyen módon cserélem az idézőjeleket, utána azokat a tageket vissza is kellene pakolászni, és bonyolultságban máris ugyanott vagyok.

A CSS a legjobb megoldás, ez több szinten is kiválóan kezeli az idézeteket, több nyelven is, egyetlen hátránya, hogy az IE6- még nem bír el vele, de az IE7 javascript framework megoldás erre is. Már ha érdekel, hogy mit mutat az IE, engem ilyen mélységben már nem izgat.
Balázs: A strip_tags() észrevétel jogos, nem gondoltam végig azt a fonalat. A regexpes megoldásnál viszont egyelőre nem látom a kifejezés bonyolultságának a végét, igen nehezen fogalmazható meg szerintem, hogy mikor kell lecserélni, előjöhet olyan eset is, amikor HTML kódot idézünk, az tartalomként jelenik meg, viszont ott sem szerencsés a csere. Egyértelmű megoldást én továbbra is a kézzel felvitt megfelelő idézőjelek használatában látom, CSS-nél valóban még vannak támogatottsági hiányok, ill. CSS támogatás hiányában is fenntartom (buta kliensek), hogy a helyes idézőjeleket célszerű prezentálni az olvasó felé.
ezzel nekem mondjuk az a gondom, hogy ha az idézőjelet pont, vessző, vagy hasonló követi, akkor (hogy volt matektanárom szavajárását idézzem), „beszart a halott”.
Új komment

Itt az adott bejegyzésben elhangzottakhoz szólhatsz hozzá. Ha primitív, csúnya, vagy bunkó erkölcsről teszel tanúbizonyságot, tuti, hogy kimoderállak és rosszat mondok rólad. A hozzászólás nem kötelező, amit írsz vállald föl!

Ezeket az adatokat - ha a böngésződ kezeli a kukikat - csak egyszer kell megadnod, később módosíthatod.

Ha van gravatarod - és a gravataros e-mail-címeddel kommentálsz -, akkor az megjelenik. Ha nincs, vagy nem tudod miaz, akkor olvasd el az útmutatót és regisztrálj.

Neved: E-mail címed (nem jelenik meg): Webszájtod (ha van): Kommented: Mennyi négy és három összege?
Ez védelmi célokat szolgál, szimplán írd be a fenti összeadás összegét!

A kommentedet írhatod nagyobb mezőbe vagy akár formázhatod is, de ha nem szalonképes, akkor moderálom!

Ajánló
Ebben a témában, esetleg ezen a napon voltak még ilyenek is:

Nexus One - A Google válasza az iPhone-ra (2010. január 05., 08:34:31)
Balabalalala (2010. május 22., 10:21:40)
Audi Shark (2009. február 28., 10:00:50)

Érdekességek
Száraz számok, pusztán csak tények:

Ez a bejegyzés 2446 napja született, 169 szóból, és 842 karakterből áll. Ajánlhatod bizonyos linkgyűjtő oldalaknak: