我正在尝试转换PHP中的任何URL,并使用正则表达式在其上添加根文件夹。
在:
http://domainNamehere.com/event/test-event-in-the-future/
后:
http://domainNamehere.com/es/event/test-event-in-the-future/
有什么想法吗?
答案 0 :(得分:0)
$url = 'http://domainNamehere.com/event/test-event-in-the-future/'; //or the function you use to grab it;
$url = str_replace('domainNamehere.com','domainNamehere.com/es', $url);
相当脏但有效而没有正则表达式,假设你的“es”文件夹总是在那个位置(我想是这样)
答案 1 :(得分:0)
如果域名始终相同,您可以使用:
$string = str_replace('domainNamehere.com', 'domainNamehere.com/es', $url);
答案 2 :(得分:0)
没有正则表达式的简单解决方案:
$root_folder = 'es';
$url = "http://domainNamehere.com/event/test-event-in-the-future/";
$p = strpos($url, '/', 8);
$url_new = sprintf('%s/%s/%s', substr($url, 0, $p), $root_folder, substr($url, $p+1));
编辑:JavaScript解决方案几乎相同:
var root_folder = 'es';
var url = "http://domainNamehere.com/event/test-event-in-the-future/";
var p = url.indexOf('/', 8);
var url_new = url.substring(0,p) + '/' + root_folder + url.substring(p);
当然,对于实时应用程序,您还应检查p
是否实际分配了有效值(这意味着是否找到了斜杠),因为您的输入中可能包含无效的URL或空字符串。< / p>
答案 3 :(得分:0)
未测试:
$url = preg_replace('#(?<=^[a-z]+://[^/]+/)#i', "es/", $url);
使用'#'分隔正则表达式,以便不必转义斜杠。
(?<=...)
搜索[a-z]://[^/]+/
的匹配项,而不将其包含在匹配的字符串中。
[a-z]+://[^/]/
匹配一系列字母后跟://
后跟非斜线,然后是斜杠。这将处理所有网络协议,尤其是http
和https
。
小i
使搜索不区分大小写。
替换只是在匹配后插入es/
。
答案 4 :(得分:0)
这是我能想到的最简洁的方式。
$new_url = preg_replace('#(?<=\w)(?=/)#', '/en', $url, 1);
它会将第二个参数中的任何内容插入到第一个斜杠之前的字符串中,该斜杠也有一个正在进行的字母数字字符。
使用PHP 5.3.6进行测试