如何将 URL 编码为 CakePHP 参数

Mar*_*ing 5 javascript php cakephp bookmarklet url-rewriting

我想创建一个用于添加书签的书签。因此,您只需单击Bookmark this Page书签中的JavaScript 代码段,您就会被重定向到该页面。

这是我当前的书签:

"javascript: location.href='http://…/bookmarks/add/'+encodeURIComponent(document.URL);"
Run Code Online (Sandbox Code Playgroud)

当我在 Bookmarklet 页面上单击它时,这会给我一个这样的 URL:

http://localhost/~mu/cakemarks/bookmarks/add/http%3A%2F%2Flocalhost%2F~mu%2Fcakemarks%2Fpages%2Fbookmarklet
Run Code Online (Sandbox Code Playgroud)

但是服务器不喜欢这样:

The requested URL /~mu/cakemarks/bookmarks/add/http://localhost/~mu/cakemarks/pages/bookmarklet was not found on this server.
Run Code Online (Sandbox Code Playgroud)

这给出了所需的结果,但对我的用例来说毫无用处:

http://localhost/~mu/cakemarks/bookmarks/add/test-string
Run Code Online (Sandbox Code Playgroud)

正在进行 CakePHP 典型的 mod_rewrite,它应该将最后一部分转换为我的BookmarksController::add($url = null)操作的参数。

我究竟做错了什么?

Mar*_*ing 2

根据 poplitea 的回答,我翻译了令人不安的字符,/:手动翻译,这样我就没有任何特殊功能。

\n\n
function esc(s) {\n    s=s.replace(/\\//g, \'__slash__\');\n    s=s.replace(/:/g, \'__colon__\');\n    s=s.replace(/#/g, \'__hash__\');\n    return s;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 PHP 中,我可以轻松地将其转换回来。

\n\n
$url = str_replace("__slash__", "/", $url);\n$url = str_replace("__colon__", ":", $url);\n$url = str_replace("__hash__", "#", $url);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不确定像?这样的字符会发生什么,所以 \xe2\x80\xa6

\n