0

当我说我想对 URL 进行部分编码时,这可能会有些奇怪,但是我陷入了这种情况,似乎我没有其他解决方案......

这是我的代码片段

    $url = isset($_GET['u']) ? esc_url($_GET['u']) : '';
        $image = isset($_GET['i']) ? $_GET['i'] : '';


   maybeappend = '<a href="?ajax=photo_thickbox&amp;i=' + encodeURIComponent(img.src) +
   '&amp;u=<?php echo urlencode($url); ?>&amp;height=400&amp;width=500" title="" 
    class="thickbox"><img src="' + img.src + '" ' + img_attr + '/></a>';

它取自 wordpress/wp-admin/press-this.php 问题是,我无法通过Press this书签发布到我的网站

我搜索了谷歌,研究了wordpress论坛,发现我需要Press this在浏览器的书签工具栏中点击按钮。

但对我来说,这不是一个解决方案,为什么?显然,我不能教每个访问者在他们的浏览器中进行此更改..所以我必须编辑驻留在服务器上的代码...

我该如何编辑encodeURIComponent(img.src)<?php echo urlencode($url); ?>所以它不编码HTTP://部分 url,

说我有一个 url ' http://www.google.com我希望它被编码为www.google.com

有什么建议吗?

我怎样才能实现我的目标?可能是一些正则表达式?(不知道正则表达式:()

这将是什么代码调整?

感谢您的帮助..

4

3 回答 3

0

您确实可以使用正则表达式来过滤http://url 的一部分(如果我理解得很好,这就是您想要做的)。

应该https?://(.*)选择您想要的部分网址(该s?部分考虑了潜在的安全链接)。

于 2013-04-19T23:32:47.883 回答
0

您需要确保任何匹配的字符串都位于字符串的开头

Javascript 使用 String.replace 和正则表达式:

url.replace( /^(http|https):\/\//, '' );

^表示字符串的开头

PHP 使用 str_replace():php.net/str_replace

if( strpos( $url, 'http' ) == 0 ){
    str_replace( array( 'http://', 'https://'), '', $url, 1 );
}

strpos也可以返回 aFALSE所以确保你使用==.

于 2013-04-19T23:33:56.047 回答
0

首先使用 substr 删除 http 部分,然后应用 urlencode 然后重新附加 http 部分。

可以使用等效的 JavaScript 函数在 JavaScript 中应用相同的方法。

$encoded = 'http://' . urlencode(substr($url, -7));
于 2013-04-19T23:31:56.580 回答