[BUGFIX] URL-encoded title in link wizard
[Packages/TYPO3.CMS.git] / typo3 / sysext / recordlist / Classes / Browser / ElementBrowser.php
index ad3e9c0..3e75934 100644 (file)
@@ -386,30 +386,30 @@ class ElementBrowser {
                        $this->thisConfig = BackendUtility::RTEsetup($RTEsetup['properties'], $RTEtsConfigParts[0], $RTEtsConfigParts[2], $RTEtsConfigParts[4]);
                }
                // Initializing the target value (RTE)
-               $this->setTarget = $this->curUrlArray['target'] != '-' ? rawurlencode($this->curUrlArray['target']) : '';
+               $this->setTarget = ($this->curUrlArray['target'] != '-') ? $this->curUrlArray['target'] : '';
                if ($this->thisConfig['defaultLinkTarget'] && !isset($this->curUrlArray['target'])) {
                        $this->setTarget = $this->thisConfig['defaultLinkTarget'];
                }
                // Initializing the class value (RTE)
-               $this->setClass = $this->curUrlArray['class'] != '-' ? rawurlencode($this->curUrlArray['class']) : '';
+               $this->setClass = ($this->curUrlArray['class'] != '-') ? $this->curUrlArray['class'] : '';
                // Initializing the title value (RTE)
-               $this->setTitle = $this->curUrlArray['title'] != '-' ? rawurlencode($this->curUrlArray['title']) : '';
+               $this->setTitle = ($this->curUrlArray['title'] != '-') ? $this->curUrlArray['title'] : '';
                // Initializing the params value
-               $this->setParams = $this->curUrlArray['params'] != '-' ? rawurlencode($this->curUrlArray['params']) : '';
+               $this->setParams = ($this->curUrlArray['params'] != '-') ? $this->curUrlArray['params'] : '';
                // BEGIN accumulation of header JavaScript:
                $JScode = '
-                               // This JavaScript is primarily for RTE/Link. jumpToUrl is used in the other cases as well...
-                       var add_href="' . ($this->curUrlArray['href'] ? '&curUrl[href]=' . rawurlencode($this->curUrlArray['href']) : '') . '";
-                       var add_target="' . ($this->setTarget ? '&curUrl[target]=' . rawurlencode($this->setTarget) : '') . '";
-                       var add_class="' . ($this->setClass ? '&curUrl[class]=' . rawurlencode($this->setClass) : '') . '";
-                       var add_title="' . ($this->setTitle ? '&curUrl[title]=' . rawurlencode($this->setTitle) : '') . '";
-                       var add_params="' . ($this->bparams ? '&bparams=' . rawurlencode($this->bparams) : '') . '";
-
-                       var cur_href="' . ($this->curUrlArray['href'] ? rawurlencode($this->curUrlArray['href']) : '') . '";
-                       var cur_target="' . ($this->setTarget ?: '') . '";
-                       var cur_class = "' . ($this->setClass ?: '') . '";
-                       var cur_title="' . ($this->setTitle ?: '') . '";
-                       var cur_params="' . ($this->setParams ?: '') . '";
+                       // This JavaScript is primarily for RTE/Link. jumpToUrl is used in the other cases as well...
+                       var add_href=' . GeneralUtility::quoteJSvalue(($this->curUrlArray['href'] ? '&curUrl[href]=' . rawurlencode($this->curUrlArray['href']) : '')) . ';
+                       var add_target=' . GeneralUtility::quoteJSvalue(($this->setTarget ? '&curUrl[target]=' . rawurlencode($this->setTarget) : '')) . ';
+                       var add_class=' . GeneralUtility::quoteJSvalue(($this->setClass ? '&curUrl[class]=' . rawurlencode($this->setClass) : '')) . ';
+                       var add_title=' . GeneralUtility::quoteJSvalue(($this->setTitle ? '&curUrl[title]=' . rawurlencode($this->setTitle) : '')) . ';
+                       var add_params=' . GeneralUtility::quoteJSvalue(($this->bparams ? '&bparams=' . rawurlencode($this->bparams) : '')) . ';
+
+                       var cur_href=' . GeneralUtility::quoteJSvalue(($this->curUrlArray['href'] ? $this->curUrlArray['href'] : '')) . ';
+                       var cur_target=' . GeneralUtility::quoteJSvalue(($this->setTarget ? $this->setTarget : '')) . ';
+                       var cur_class=' . GeneralUtility::quoteJSvalue(($this->setClass ? $this->setClass : '')) . ';
+                       var cur_title=' . GeneralUtility::quoteJSvalue(($this->setTitle ? $this->setTitle : '')) . ';
+                       var cur_params=' . GeneralUtility::quoteJSvalue(($this->setParams ? $this->setParams : '')) . ';
 
                        function browse_links_setTarget(target) {       //
                                cur_target=target;
@@ -554,7 +554,8 @@ class ElementBrowser {
                                var add_act = URL.indexOf("act=")==-1 ? "&act=' . $this->act . '" : "";
                                var add_mode = URL.indexOf("mode=")==-1 ? "&mode=' . $this->mode . '" : "";
                                var theLocation = URL + add_act + add_mode + add_href + add_target + add_class + add_title + add_params'
-                                       . ($addPassOnParams ? '+"' . $addPassOnParams . '"' : '') . '+(typeof(anchor)=="string"?anchor:"");
+                                       . ($addPassOnParams ? '+"' . GeneralUtility::quoteJSvalue($addPassOnParams) . '"' : '')
+                                       . '+(typeof(anchor)=="string"?anchor:"");
                                window.location.href = theLocation;
                                return false;
                        }
@@ -973,13 +974,13 @@ class ElementBrowser {
                                                        // URL + onclick event:
                                                        $onClickEvent = '';
                                                        if (isset($v[$k2i . '.']['target'])) {
-                                                               $onClickEvent .= 'browse_links_setTarget(\'' . $v[($k2i . '.')]['target'] . '\');';
+                                                               $onClickEvent .= 'browse_links_setTarget(' . GeneralUtility::quoteJSvalue($v[($k2i . '.')]['target']) . ');';
                                                        }
                                                        $v[$k2i . '.']['url'] = str_replace('###_URL###', $this->siteURL, $v[$k2i . '.']['url']);
                                                        if (substr($v[$k2i . '.']['url'], 0, 7) === 'http://' || substr($v[$k2i . '.']['url'], 0, 7) === 'mailto:') {
-                                                               $onClickEvent .= 'cur_href=unescape(\'' . rawurlencode($v[($k2i . '.')]['url']) . '\');link_current();';
+                                                               $onClickEvent .= 'cur_href=' . GeneralUtility::quoteJSvalue($v[($k2i . '.')]['url']) . ';link_current();';
                                                        } else {
-                                                               $onClickEvent .= 'link_spec(unescape(\'' . $this->siteURL . rawurlencode($v[($k2i . '.')]['url']) . '\'));';
+                                                               $onClickEvent .= 'link_spec(' . GeneralUtility::quoteJSvalue($this->siteURL . $v[($k2i . '.')]['url']) . '));';
                                                        }
                                                        // Link:
                                                        $A = array('<a href="#" onclick="' . htmlspecialchars($onClickEvent) . 'return false;">', '</a>');
@@ -1530,8 +1531,8 @@ class ElementBrowser {
                                                                        'width="18" height="16"') . ' alt="" />'
                                                                . '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], ('gfx/ol/join'
                                                                        . ($skey + 3 > count($split) ? 'bottom' : '') . '.gif'), 'width="18" height="16"')
-                                                                       . ' alt="" />' . '<a href="#" onclick="return link_typo3Page(\'' . $expPageId
-                                                                       . '\',\'#' . rawurlencode($sval) . '\');">' . htmlspecialchars((' <A> ' . $sval))
+                                                                       . ' alt="" />' . '<a href="#" onclick="return link_typo3Page(' . GeneralUtility::quoteJSvalue($expPageId)
+                                                                       . ',' . GeneralUtility::quoteJSvalue('#' . $sval) . ';">' . htmlspecialchars((' <A> ' . $sval))
                                                                        . '</a><br />';
                                                }
                                        }
@@ -1924,9 +1925,9 @@ class ElementBrowser {
                $content .= $this->barheader(sprintf($GLOBALS['LANG']->getLL('folders') . ' (%s):', count($folders)));
                $titleLength = (int)$GLOBALS['BE_USER']->uc['titleLen'];
                // Create the header of current folder:
-               $aTag = '<a href="#" onclick="return insertElement(\'\',\'' . rawurlencode($baseFolderPath)
-                       . '\', \'folder\', \'' . rawurlencode($baseFolderPath) . '\', unescape(\'' . rawurlencode($baseFolderPath)
-                       . '\'), \'\', \'\',\'\',1);">';
+               $aTag = '<a href="#" onclick="return insertElement(\'\',' . GeneralUtility::quoteJSvalue($baseFolderPath)
+                       . ', \'folder\', ' . GeneralUtility::quoteJSvalue($baseFolderPath) . ', ' . GeneralUtility::quoteJSvalue($baseFolderPath)
+                       . ', \'\', \'\',\'\',1);">';
                // Add the foder icon
                $folderIcon = $aTag;
                $folderIcon .= '<img' . IconUtility::skinImg($GLOBALS['BACK_PATH'], 'gfx/i/_icon_webfolders.gif',
@@ -1946,12 +1947,12 @@ class ElementBrowser {
                                . '" class="absmiddle" alt="" />';
                        // Create links for adding the folder:
                        if ($this->P['itemName'] != '' && $this->P['formName'] != '') {
-                               $aTag = '<a href="#" onclick="return set_folderpath(unescape(\'' . rawurlencode($folderPath)
-                                       . '\'));">';
+                               $aTag = '<a href="#" onclick="return set_folderpath(' . GeneralUtility::quoteJSvalue($folderPath)
+                                       . ');">';
                        } else {
-                               $aTag = '<a href="#" onclick="return insertElement(\'\',\'' . rawurlencode($folderPath)
-                                       . '\', \'folder\', \'' . rawurlencode($folderPath) . '\', unescape(\''
-                                       . rawurlencode($folderPath) . '\'), \'' . $pathInfo['extension'] . '\', \'\');">';
+                               $aTag = '<a href="#" onclick="return insertElement(\'\',' . GeneralUtility::quoteJSvalue($folderPath)
+                                       . ', \'folder\', ' . GeneralUtility::quoteJSvalue($folderPath) . ', '
+                                       . GeneralUtility::quoteJSvalue($folderPath) . ', \'' . $pathInfo['extension'] . '\', \'\');">';
                        }
                        if (strstr($folderPath, ',') || strstr($folderPath, '|')) {
                                // In case an invalid character is in the filepath, display error message:
@@ -2078,8 +2079,8 @@ class ElementBrowser {
                                        </tr>';
                                $lines[] = '
                                        <tr>
-                                               <td colspan="2"><img src="' . $iUrl . '" data-htmlarea-file-uid="' . $fileObject->getUid()
-                                       . '" width="' . $IW . '" height="' . $IH . '" border="1" alt="" /></td>
+                                               <td colspan="2"><img src="' . htmlspecialchars($iUrl) . '" data-htmlarea-file-uid="' . $fileObject->getUid()
+                                       . '" width="' . htmlspecialchars($IW) . '" height="' . htmlspecialchars($IH) . '" border="1" alt="" /></td>
                                        </tr>';
                                $lines[] = '
                                        <tr>