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.
atee
2006. szeptember 09. — 17:59:01
Kár hogy a freeblogon nem lehet php-t futtatni :(…
axes
2006. szeptember 09. — 18:08:17
Nem értek a php-hoz, de ezt spec. nagyon is megértettem 🙂
Balázs
2006. szeptember 09. — 18:28:47
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. (-;
Balázs
2006. szeptember 09. — 19:01:10
Jé, most már jó lett. ((-:
Dani
2006. szeptember 09. — 20:10:32
Ez jó, köszi szépen! 🙂
Mefi
2006. szeptember 09. — 21:37:03
[re=16756]atee[/re]: kiegészítem majd egy JavaScript és CSS aprósággal is. 🙂
[re=16759]axes[/re]: akkor megérte. 🙂
[re=16763]Balázs[/re]: már jobb, időközben kapott egy overflow: auto; -t ;]
[re=16767]Dani[/re]: nincsen mit. 🙂
lippije
2006. szeptember 09. — 22:10:02
hehe, éppen pénteken hackoltam egy hasonlót én is össze. Jó dolog ez a PHP 🙂
tiny
2006. szeptember 09. — 22:10:59
De ha
Mefi
2006. szeptember 09. — 22:19:16
[re=16773]lippije[/re]: jó biza 🙂
[re=16774]tiny[/re]: Akkor sem igazándiból. Tudniillik azt mondod, hogy a
-t az ”-ra. De az meg nem szép. Megoldható persze, de azért ez szebb. (Egyébként itt CSS-sel van.)tiny
2006. szeptember 10. — 10:49:16
[re=16779]Mefi[/re]:Szép, vagy nem szép, a végeredmény ugyanaz, de a kódod egyszerűbb.
atee
2006. szeptember 10. — 13:48:06
[re=16768]Mefi[/re]:Az jó lesz 😉
Gábor
2006. szeptember 10. — 21:27:02
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.
Balázs
2006. szeptember 11. — 11:56:47
[re=16841]Gábor[/re]: 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.
Gábor
2006. szeptember 11. — 13:30:30
[re=16862]Balázs[/re]: 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é.
Vale
2008. január 09. — 19:45:44
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”.