From 043eae70c4c57b0447b56a58b64ce9d102895396 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 24 Mar 2016 19:40:12 +0100 Subject: Fixes #480: add an option to urlencode redirector URL * New config: `$GLOBALS['config']['REDIRECTOR_URLENCODE']` (default `true`). * Parameter added to LinkDB constructor. * Fixes a bug with urlencode and escaped url. * In `index.php`, LinkDB is now instanciate once for `importFile()` and `showDaily()`. * TU --- application/LinkDB.php | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'application') diff --git a/application/LinkDB.php b/application/LinkDB.php index a62341fc..1cb70de0 100644 --- a/application/LinkDB.php +++ b/application/LinkDB.php @@ -65,22 +65,40 @@ class LinkDB implements Iterator, Countable, ArrayAccess // link redirector set in user settings. private $_redirector; + /** + * Set this to `true` to urlencode link behind redirector link, `false` to leave it untouched. + * + * Example: + * anonym.to needs clean URL while dereferer.org needs urlencoded URL. + * + * @var boolean $redirectorEncode parameter: true or false + */ + private $redirectorEncode; + /** * Creates a new LinkDB * * Checks if the datastore exists; else, attempts to create a dummy one. * - * @param string $datastore datastore file path. - * @param boolean $isLoggedIn is the user logged in? - * @param boolean $hidePublicLinks if true all links are private. - * @param string $redirector link redirector set in user settings. + * @param string $datastore datastore file path. + * @param boolean $isLoggedIn is the user logged in? + * @param boolean $hidePublicLinks if true all links are private. + * @param string $redirector link redirector set in user settings. + * @param boolean $redirectorEncode Enable urlencode on redirected urls (default: true). */ - function __construct($datastore, $isLoggedIn, $hidePublicLinks, $redirector = '') + function __construct( + $datastore, + $isLoggedIn, + $hidePublicLinks, + $redirector = '', + $redirectorEncode = true + ) { $this->_datastore = $datastore; $this->_loggedIn = $isLoggedIn; $this->_hidePublicLinks = $hidePublicLinks; $this->_redirector = $redirector; + $this->redirectorEncode = $redirectorEncode === true; $this->_checkDB(); $this->_readDB(); } @@ -278,7 +296,12 @@ You use the community supported version of the original Shaarli project, by Seba // Do not use the redirector for internal links (Shaarli note URL starting with a '?'). if (!empty($this->_redirector) && !startsWith($link['url'], '?')) { - $link['real_url'] = $this->_redirector . urlencode($link['url']); + $link['real_url'] = $this->_redirector; + if ($this->redirectorEncode) { + $link['real_url'] .= urlencode(unescape($link['url'])); + } else { + $link['real_url'] .= $link['url']; + } } else { $link['real_url'] = $link['url']; -- cgit v1.2.3