ugrás a tartalomhoz

HTML szövegben szereplő text url-ek link-ké alakitása JAVA nyelven

troy1979 · 2012. Május. 30. (Sze), 16.35
adott pl az alábbi tinyMCE editor által előállitott szöveg

<p>www.google.com</p>
<p>http://www.google.com</p>
<p>https://www.google.com</p>
<p>ez egy html link: <a title="index.hu" href="http://www.index.hu" target="_blank">www.index.hu</a></p>
szeretném a benne lévő text url-eket (pl http://www.google.com) az adott oldalra mutató linkre cserélni , mindezt természetesen úgy, hogy a szövegben már meglévő a tag-eket ne érintse a változtatás

Azt tudom, hogy vagy valamilyen java-s html parser-t vagy regexpet kéne használnom, de tekintve hogy ezen a téren nem vagyok annyira jártas a segitségeteket/tanácsotokat kérném ti mit használtok erre a célra

Vagy esetleg tudtok a tinyMCE-hez olyan plugint , ami a begépelt sima text linkeket url-é alakitja már a kliens oldalon? ( mint ahogy azt az Internet Explorer teszi automatikusan pl)

Előre is köszi a segitségeteket

Peti
 
1

Parser + Regex

Poetro · 2012. Május. 30. (Sze), 16.52
Én a kettőt kombinálnám. Azaz egy DOM fát építenék, majd abban keresnék reguláris kifejezéssel a Text Node-ok között URL után kutatva. Ha találtunk egy URL-t, akkor a szülőkön rekurzív végigmenve megnézzük, hogy valamelyik link-e, és ha nem, akkor a szöveget lecseréljük egy link elemre. Maga a folyamat nem igazán egyszerű, legalábbis az URL-ek megtalálására, de szerintem a Java-nak van erre kész osztálya.
2

A java.util.regex alatt van

Karvaly84 · 2012. Május. 30. (Sze), 17.10
A java.util.regex alatt van pár osztály ami segítheti munkát, egyébként meg a String objektumok replace, replaceFirst, replaceAll metódusai is képesek erre.
3

A String metódusokat itt jobb

kuka · 2012. Május. 30. (Sze), 17.40
A String metódusokat itt jobb elfelejteni, mert a létező linkek átugrása túlzottan cifra volna velük. Viszont a java.util.regex.* osztályok valóban segíthetnek. Csak éppen el kell fogyasztani az átugrandó részeket is és közben ellenőrizni, hogy mikor mit talált:

String linkesit(String szoveg)
{
  StringBuffer eredmeny = new StringBuffer();

  Pattern minta = Pattern.compile("(https?://[\\w./?=&#]+)|<.*?>");
  Matcher talalat = minta.matcher(szoveg);
  while (talalat.find())
    if (talalat.group(1) != null)
      talalat.appendReplacement(eredmeny, "<a href=\"" + talalat.group() + "\">" + talalat.group() + "</a>");

  return talalat.appendTail(eredmeny).toString();
}
De természetesen az ajánlott módszer a HTML parser használata.
4

Én inkább HTML parserrel

inf3rno · 2012. Május. 30. (Sze), 21.36
Én inkább HTML parserrel állnék neki, legalábbis itt azt ajánlják erősen.
5

Egyébként miért akarsz java-t

Karvaly84 · 2012. Május. 31. (Cs), 00.16
Egyébként miért akarsz java-t használni? Szerver oldalon is az megy? Én még nem hekkeltem ilyen editorokat, de a dokumentációjában lehet le van írva hol kel bele piszkálni, hogy ki cseréld a text url-eket.
6

Igen, a szerver oldalon JAVA

troy1979 · 2012. Május. 31. (Cs), 17.12
Igen, a szerver oldalon JAVA fut

Próbáltam utána nézni a tinyMCE dokumentációjába, hogy hogyan lehetne szöveges url-eket egyből html link-ké alakitani, de nem találtam ilyen config paramétert

az egyetlen böngésző ami begépelt szövegben lévő url-eket automatikusan link-ké alakitotta az az IE volt , az összes többi (FF, chrome, opera, safari) nem csinálta ezt sajnos meg

És csak olyan tinyMCE plugin-t találtam, ami az IE-ben is kikapcsolja ezt az automatikus funkciót :(

Szóval ezért próbálom a szerver oldalon megoldani a konverziót
7

Biztos vagyok benne, hogy

inf3rno · 2012. Május. 31. (Cs), 18.01
Biztos vagyok benne, hogy tinymce-ben van olyan utószűrő, ami ezt megcsinálja helyetted, csak jól kell rákeresni...
8

De lehet, hogy kliens oldalon

Karvaly84 · 2012. Május. 31. (Cs), 18.29
De lehet, hogy kliens oldalon is le lehetne küzdeni a problémát egy eseménykezelővel. Hisz ha már a tinyMCE fut, akkor js is lesz az ablakban.
9

Én is ezt mondom...

inf3rno · 2012. Május. 31. (Cs), 20.32
10

Ja én azt hittem a Java felől

Karvaly84 · 2012. Május. 31. (Cs), 20.53
Ja én azt hittem a Java felől mondod :D

Egyébként most kerestem rá (mert megtetszett az oldalon pár érdekesebb dolog böngészés közben), hogy hogyan is lehetne, és a http://www.tinymce.com/wiki.php/Configuration szakaszban kitérnek pár eseménykezelőre, amikkel lehet fokozni a hatékonyságot. Pl. az onsubmit eseményre van beépített rendszer.

// ui.

Megnéztem a linket, és közbe azt fedeztem fel, hogy a TinyMCE alapkiszerelésben tartalmazza ezt a plugin-t, vagyis a forráskódot nézve csak egy ugyan olyan nevű plugin-t.

// Kb. ennyi beizzítani.
tinyMCE.init({
        theme : "advanced",
        mode : "textareas",
        plugins : "autolink"
})
11

Hát úgy vezették be, hogy

inf3rno · 2012. Május. 31. (Cs), 23.08
Hát úgy vezették be, hogy azért csinálták a plugint, mert az eredetiből hiányzott ez meg az... Gondolom nem véletlen, hogy azonos néven vannak.
12

igen, én is néztem ezt az autólink plugint

troy1979 · 2012. Júl. 5. (Cs), 14.23
és azt irták, hogy az IE -hez irták

A tesztek alapján egyedül az IE alakitotta linké a beirt szöveget, a többi böngésző nem , és ez a plugin állitólag ezt a funkciót hivatott kikapcsolni

Persze lehet, hogy én értettem félre valamit, de 1 ilyen leirás után nem próbáltam ki a plugin-t végül is 1 kis regexp és html parser segitségével oldottam meg a problémát
13

Ohh, gondolom csak

inf3rno · 2012. Júl. 5. (Cs), 15.12
Ohh, gondolom csak felületesen futottam át a leírást. :S