📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst
Hoe wil je dat de links eruit gaan zien? Als in http://eenhelelangelink.com/.../index.php of wil je de link als tekst laten verschijnen zodat www.eenhelelangelink.com/dienoglangeris/index.php er klikbaar uitkomt als eenhelelangelink?
Als ik je code ff draai krijg ik hetvolgende:
Dit moet een link worden http://www.eenhelelangeli...geris/?variabele=blaat...
en hij is dus klikbaar:
1
| Dit moet een link worden <a href="http://www.eenhelelangelink.nl/dienoglangeris/?variabele=blaat">http://www.eenhelelangelink.nl/dienoglangeris/?variabele=blaat...</a> |
If money talks then I'm a mime
If time is money then I'm out of time
1
2
3
4
| function maakLangeLinkKort($link) { return '<a href="'. $link .'">'. substr($link, 0, 10) . '...'. substr($link, -10) .'</a>'; } |
Dit gaat trouwens sowieso niet:
1
| $replacement .= substr('\\1', 0, 10); |
Wat je daar doet is de sub-string nemen van de string '\\1'. Maar dat slaat natuurlijk nergens op. Dat \\1 kun je alleen gebruiken binnen de eregi_replace() functie, en niet *zomaar* binnen een substr();
Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten
\ en quotes zijn altijd gevaarlijk in strings!
Edit:
Ik weet niet hoe gevoelig je phpparser is, maar je link staat ook tussen enkel-quotes. Daar moet je ook mee uitkijken, die zijn eigenlijk voor karakters en niet voor strings.
Edit2:
Om de code van HuHu wat mooier te maken kun je ervoor kiezen om je file te laten zien door te splitten op // of door je reguliere expressie aan te passen...
[ Voor 55% gewijzigd door Matis op 17-03-2009 11:19 . Reden: Extra tekst ]
If money talks then I'm a mime
If time is money then I'm out of time
Dit raakt echt kant noch wal, lees aub eerst zelf de documentatie voor het verschil tussen strings met single en double quotes.toaomatis schreef op dinsdag 17 maart 2009 @ 11:14:
Ik weet niet hoe gevoelig je phpparser is, maar je link staat ook tussen enkel-quotes. Daar moet je ook mee uitkijken, die zijn eigenlijk voor karakters en niet voor strings.
{signature}
Okee, misschien raakt het kant noch wal, maar volgens de deftig-programeren cursus welke ik gevolgd heb blijkt uit het gebruik van single en double quotes de vaardigheid van de programmeur en de netheid/punctualiteit van de code.Voutloos schreef op dinsdag 17 maart 2009 @ 11:18:
[...]
Dit raakt echt kant noch wal, lees aub eerst zelf de documentatie voor het verschil tussen strings met single en double quotes.
Hier wordt idd aangegeven dat je zowel single als dubbel quotes kan gebruiken, MAAR je escaped-chars zijn wel een stuk uitgebreider EN!!! je hebt ze nodig voor je expressie:
Zie:
[0-7]{1,3} the sequence of characters matching the regular expression is a character in octal notation \x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a character in hexadecimal notation
[ Voor 0% gewijzigd door Matis op 17-03-2009 11:25 . Reden: Typo's ]
If money talks then I'm a mime
If time is money then I'm out of time
Dat is echt onzin, enkele quotes zijn voor PHP zelfs aan te raden voor strings gezien ze marginaal sneller zijn.toaomatis schreef op dinsdag 17 maart 2009 @ 11:14:
Kijk anders eens naar deze functie: quotemeta
Ik weet niet hoe gevoelig je phpparser is, maar je link staat ook tussen enkel-quotes. Daar moet je ook mee uitkijken, die zijn eigenlijk voor karakters en niet voor strings.
If money talks then I'm a mime
If time is money then I'm out of time
Ik wil dat een lange link er zo uit komt te zientoaomatis schreef op dinsdag 17 maart 2009 @ 11:08:
Ondanks mijn redelijke kennis met PHP begrijp ik niet wat je bedoelt met je omschrijving?
http://www...bele=blaat (al zal het aantal karakters wel wat meer dan 10 kunnen zijn...)
Dus de tekst moet korter zijn, maar de link uiteraard hetzelfde.
function maakLangeLinkKort($link) van HuHu helpt niet, omdat ik niet weet wat links zijn in een hoop tekst. Daarvoor gebruik ik juist de regulier expressie.
Daar kwam ik achter ja... maar hoe kan ik mijn probleem dan wel oplossen? Ofwel met een php functie, ofwel met een reguliere expressie.Wat je daar doet is de sub-string nemen van de string '\\1'. Maar dat slaat natuurlijk nergens op. Dat \\1 kun je alleen gebruiken binnen de eregi_replace() functie, en niet *zomaar* binnen een substr();
[ Voor 8% gewijzigd door antonboonstra op 17-03-2009 11:53 ]
📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst
in combinatie met de functie van HuHu
Je pattern moet dan matchen op je links die je wilt replacen. In je callback functie kun je dan een kortere link returnen.
[ Voor 36% gewijzigd door Woy op 17-03-2009 11:57 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Waar heb jij het in hemelsnaam over? Dat soort dingen zijn taal-afhankelijk, dus wat jij op je "deftig-programmeren" cursus hebt geleerd hoeft helemaal niet van toepassing te zijntoaomatis schreef op dinsdag 17 maart 2009 @ 11:24:
[...]
Okee, misschien raakt het kant noch wal, maar volgens de deftig-programeren cursus welke ik gevolgd heb blijkt uit het gebruik van single en double quotes de vaardigheid van de programmeur en de netheid/punctualiteit van de code.

In dit topic gaat het over PHP, dus dan pakken we er wat coding standards bij voor PHP. Bijvoorbeeld die van Zend Technologies, waarin we lezen:
Bron: http://framework.zend.com...dard.coding-style.stringsB.4. Coding Style
...B.4.2. Strings
B.4.2.1. String Literals
When a string is literal (contains no variable substitutions), the apostrophe or "single quote" should always be used to demarcate the string:
$a = 'Example String';B.4.2.2. String Literals Containing Apostrophes
When a literal string itself contains apostrophes, it is permitted to demarcate the string with quotation marks or "double quotes". This is especially useful for SQL statements:
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
This syntax is preferred over escaping apostrophes as it is much easier to read.
Dus: altijd single-quotes gebruiken tenzij je niet anders kunt. Waar jij het gekke verschil tussen singe- en double-quotes voor karakters en strings vandaan haalt weet ik niet. Wellicht ben je in verwarring met Java.
Bedankt voor je reactie. Na het bestuderen van de functie heb ik het werkend gekregen. Mijn oplossing (zonder de expressie aan te passen)Woy schreef op dinsdag 17 maart 2009 @ 11:56:
Je zou een kunnen kijken naar http://nl3.php.net/preg_replace_callback
in combinatie met de functie van HuHu
Je pattern moet dan matchen op je links die je wilt replacen. In je callback functie kun je dan een kortere link returnen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php echo makeClickableLinks('Dit moet een link worden http://www.eenhelelangelink.nl/dienoglangeris/?variabele=blaat'); function makeClickableLinks($text) { return preg_replace_callback('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', "shorten_url", $text); } function shorten_url($matches) { $short_url = $matches[0]; if(strlen($short_url)>65) $short_url = substr($short_url, 0, 40) . '...' . substr($short_url, -20); return '<a href="' . $matches[0] . '">' . $short_url . '</a>'; } ?> |
[ Voor 3% gewijzigd door antonboonstra op 17-03-2009 13:36 ]
📸Canon EOS 5D IV 🚁DJI Mavic Pro 🏍️Zero SR ⚡Tesla M3 LR 🌡️Daikin US 3.5kW ☀️8815Wp 🔋Marstek Venus-E 5,12 kWh Tweakers PVOutput lijst
Na het verlengen van de url wordt er mooi een aantal ... toegevoegd ergens middenin!
Wat misschien nog mooier is, is je domain + tld te laten zien en het bestandsnaam waar de link naar verwijst dus het laatste na de laatste / en evetueel je GET's niet te laten afdrukken. Maar dat is alleen maar finetunen:
Immers deze regel
1
| echo makeClickableLinks('Dit moet een link worden http://www.eenhelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat'); |
resulteerd in:
1
| Dit moet een link worden <a href="http://www.eenhelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat">http://www.eenhelelangelink.nl/dienoglan....php?variabele=blaat</a> |
Wat er onscreen zo uitziet:
Dit moet een link worden http://www.eenhelelangeli...an....php?variabele=blaat
Persoonlijk zal ik het liever zo zien:
(http://www.)eenhelelangelink.nl/..../index.php(?variabele=blaat).
Tussen haakjes mag wel maar persoonlijk maakt dat je link altijd een stuk langer en IMO niet netter.
If money talks then I'm a mime
If time is money then I'm out of time
Op zich is dat een leuk idee, maar er zijn zoveel gevallen waar je dit niet voor elkaar kan krijgen, dat ik het gewoon achterwege zou laten.toaomatis schreef op woensdag 18 maart 2009 @ 09:15:
(http://www.)eenhelelangelink.nl/..../index.php(?variabele=blaat).
bij de volgende url is het bijvoorbeeld al niet mogenlijk om het "netjes" te doen
1
| http://www.ditiseenhelelangeurlendaaromishetbijnaniettedoenomhemgoedintekorten.nl/enookdefilenameiserglangdusdiekanjeooknietlatenzien.htm?enmischienzijndeparametersookwelbelangrijkenerglang=true |
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Er zijn natuurlijk altijd uitzonderingen die de regel bevestigen. je zal dat ook weer kunnen checken op lengte.
Zodat je straks 100 regels met checks hebt zodat je url keurig netjes is
Ik zal straks ook wel eens wat fabriceren!
[ Voor 7% gewijzigd door Matis op 18-03-2009 09:36 . Reden: Extra tekst, Typo's ]
If money talks then I'm a mime
If time is money then I'm out of time
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| // <defines> define("cutoffsize", 30); define("cutofflength", 10); // </defines> function makeClickableLinks($link) { return preg_replace_callback('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', "shorten_url", $link); } function shorten_url($matches) { $toreturn = ""; $short_url = $matches[0]; $short_url_array = explode('//',$short_url); // get rid of http:// or ftp:// $short_url_array = explode('/', $short_url_array[1]); // explode on / to get domain & dirs & filename for ($i = 0; $i < sizeof($short_url_array); $i++) { $splitter = $short_url_array[$i]; if($i == 0) // (prefix) + domain { $prefix_sub_domain_tld_array = explode(".",$splitter); $splitter = ""; for ($n = 0; $n < sizeof($prefix_sub_domain_tld_array); $n++) { $temp = $prefix_sub_domain_tld_array[$n]; if(strlen($temp)>cutoffsize) { $temp = substr($temp, 0, cutofflength) . '...' . substr($temp, -cutofflength); } if ($n < (sizeof($prefix_sub_domain_tld_array) -1)) { $splitter .= $temp . '.'; } else { $splitter .= $temp; } } $splitter .= '/'; } elseif($i == (sizeof($short_url_array) - 1)) // filename { $filename_suffix = explode(".",$splitter); $splitter = $filename_suffix[0]; // filename if(strlen($splitter)>cutoffsize) { $splitter = substr($splitter, 0, cutofflength) . '...' . substr($splitter, -cutofflength); } $splitter .= '.'; $splitter .= $filename_suffix[1]; // suffix } else // dir { $splitter = '.../'; } $toreturn .= $splitter; } return '<a href="' . $matches[0] . '">' . $toreturn . '</a>'; } echo "URL: " . $url = 'http://www.eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat'; echo "<br> \n"; echo makeClickableLinks('Dit moet een link worden '. $url); echo "\n<hr>\n"; echo "URL: " . $url = 'ftp://eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat'; echo "<br> \n"; echo makeClickableLinks('Dit moet een link worden '. $url); echo "\n<hr>\n"; echo "URL: " . $url = 'http://www.eenhelehelehelehelehelehelehelehelelangelink.nl/index.php?variabele=blaat'; echo "<br> \n"; echo makeClickableLinks('Dit moet een link worden '. $url); echo "\n<hr>\n"; echo "URL: " . $url = 'http://www.eenhelehelehelehelehelehelehelehelelangesubdomein.eenhelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/eenhelehelehelehelehelehelehelehelelangesubdomeinfile.php?variabele=blaat'; echo "<br> \n"; echo makeClickableLinks('Dit moet een link worden '. $url); echo "\n<hr>\n"; |
Geeft als resultaat:
1
2
3
4
5
6
7
8
9
10
11
12
| URL: http://www.eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat<br> Dit moet een link worden <a href="http://www.eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat">www.eenhelehel...elangelink.nl/.../.../index.php?variabele=blaat</a> <hr> URL: ftp://eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat<br> Dit moet een link worden <a href="ftp://eenhelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/index.php?variabele=blaat">eenhelehel...elangelink.nl/.../.../index.php?variabele=blaat</a> <hr> URL: http://www.eenhelehelehelehelehelehelehelehelelangelink.nl/index.php?variabele=blaat<br> Dit moet een link worden <a href="http://www.eenhelehelehelehelehelehelehelehelelangelink.nl/index.php?variabele=blaat">www.eenhelehel...elangelink.nl/index.php?variabele=blaat</a> <hr> URL: http://www.eenhelehelehelehelehelehelehelehelelangesubdomein.eenhelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/eenhelehelehelehelehelehelehelehelelangesubdomeinfile.php?variabele=blaat<br> Dit moet een link worden <a href="http://www.eenhelehelehelehelehelehelehelehelelangesubdomein.eenhelehelehelehelehelehelehelehelelangelink.nl/dienoglangeris/dienoglangeris/eenhelehelehelehelehelehelehelehelelangesubdomeinfile.php?variabele=blaat">www.eenhelehel...esubdomein.eenhelehel...elangelink.nl/.../.../eenhelehel...domeinfile.php?variabele=blaat</a> <hr> |
Sorry dat het zo moet. Anders maakt tweakers er op een lelijke manier een korte link van
[ Voor 13% gewijzigd door Matis op 18-03-2009 11:32 . Reden: Opmaak gewijzigd ]
If money talks then I'm a mime
If time is money then I'm out of time
{signature}
Bovendien ga je er in deze code van uit dat alles wat na de eerste punt na de laatste / komt de extensie van de filename is. Dat hoeft natuurlijk niet het geval te zijn.
Test bijvoorbeeld maar eens met deze link
1
| http://www.google.com/search?hl=nl&client=opera&rls=en&hs=OoY&q=test+.&btnG=Zoeken&lr= |
En zo kan ik nog wel meer voorbeelden bedenken waar je code in de mist gaat.
Dus ik blijf bij mijn standpunt
Woy schreef op woensdag 18 maart 2009 @ 09:32:
[...]
Op zich is dat een leuk idee, maar er zijn zoveel gevallen waar je dit niet voor elkaar kan krijgen, dat ik het gewoon achterwege zou laten.
Daar kun je inderdaad al een hoop mee opvangen. Maar het feit blijft dat je altijd zulke url's kunt bedenken dat het inkorten niet op een "mooie" manier gedaan kan worden, zonder dat het resultaat alsnog erg lang word.Voutloos schreef op woensdag 18 maart 2009 @ 11:37:
Iets met parse_url() en dan de scheme en query negeren was zeker geen uitdaging voor je?
[ Voor 21% gewijzigd door Woy op 18-03-2009 11:43 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ik had ff niets te doen en ik wilde ff een beetje scripten...
Edit:
Het loopt nu een beetje door elkaar:
@ hierboven, ja klopt. Er zijn natuurlijk 1000 en 1 mogelijkheden waarin mijn code niet zal werken. Ik ben uitgegaan van de TS's situatie
Edit 2:
1
2
3
| $url = 'http://www.google.com/search?hl=nl&client=opera&rls=en&hs=OoY&q=test+.&btnG=Zoeken&lr='; print_r(parse_url($url)); |
geeft:
1
| Array ( [scheme] => http [host] => www.google.com [path] => /search [query] => hl=nl&client=opera&rls=en&hs=OoY&q=test+.&btnG=Zoeken&lr= ) |
[ Voor 76% gewijzigd door Matis op 18-03-2009 11:51 . Reden: Extra tekst ]
If money talks then I'm a mime
If time is money then I'm out of time
Dat is ook het punt wat ik wilde maken. Er zijn zoveel mogenlijkheden dat je ze nooit allemaal af kunt vangen. Bij de google query wil je bijvoorbeeld de query tonen, maar bij een andere link wil je weer wat anders tonen.toaomatis schreef op woensdag 18 maart 2009 @ 11:41:
@ hierboven, ja klopt. Er zijn natuurlijk 1000 en 1 mogelijkheden waarin mijn code niet zal werken. Ik ben uitgegaan van de TS's situatie
Je kunt je daarom afvragen of het wel de moeite is om er veel werk in te stoppen, terwijl de gebruiker gewoon de hele url kan zien als hij er even met zijn muis overheen gaat.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ik was niet van plan om het ook maar ergens voor te gaan gebruiken. Ik verveelde me even en ik denk: Ik zal eens een beetje aanmodderen.Woy schreef op woensdag 18 maart 2009 @ 11:54:
Je kunt je daarom afvragen of het wel de moeite is om er veel werk in te stoppen, terwijl de gebruiker gewoon de hele url kan zien als hij er even met zijn muis overheen gaat.
Dat is aardig gelukt voor de situatie van de TS. Ik heb er weer mooi 1,5 uur aan gewerkt en de baas betaald
Ik ga maar eens ff lunchen.
If money talks then I'm a mime
If time is money then I'm out of time