简体   繁体   English

在php中编码网址

[英]Encode url in php

I have string url variable; 我有字符串url变量;

$url ="http://carkva-gazeta.org/римско-католическая-церковь/";

I need transform $url to: 我需要将$ url转换为:

"http://carkva-gazeta.org/%d1%80%d0%b8%d0%bc%d1%81%d0%ba%d0%be-%d0%ba%d0%b0%d1%82%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b0%d1%8f-%d1%86%d0%b5%d1%80%d0%ba%d0%be%d0%b2%d1%8c/"

I have tried: rawurlencode($url); 我试过了: rawurlencode($url); and urlencode($url); urlencode($url); But result is: 但是结果是:

http%3A%2F%2Fcarkva-gazeta.org%2F%D1%80%D0%B8%D0%BC%D1%81%D0%BA%D0%BE-%D0%BA%D0%B0%D1%82%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D1%86%D0%B5%D1%80%D0%BA%D0%BE%D0%B2%D1%8C%2F
$url = "http://carkva-gazeta.org/";
$url .= urlencode("римско-католическая-церковь");

echo $url;

Like so? 这样吗

Probably that's the best solution: 也许那是最好的解决方案:

$url ="http://carkva-gazeta.org/римско-католическая-церковь/";

$x = parse_url($url);

echo $x['scheme'].'://'.$x['host'].strtolower(str_replace('%2F','/',urlencode($x['path'])));

I've used also strtolower to make it lowercase as you wanted 我也用strtolower将它设置为小写

Assuming that you are getting your URL string automatically/dynamically and that it is not a fixed string that you can simply split while writing your code, you'll want something like this 假设您正在自动/动态获取URL字符串,并且它不是固定字符串,您可以在编写代码时简单地对其进行拆分,那么您将需要这样的内容

$url = "http://carkva-gazeta.org/римско-католическая-церковь/";

// in case it is https, we don't want to hardcode http
$scheme = parse_url($url, PHP_URL_SCHEME);
$host = parse_url($url, PHP_URL_HOST);
// do not encode the first '/' or the last '/'
$encodedPath = strtolower(urlencode(substr(parse_url($url, PHP_URL_PATH), 1, -1)));

$encodedUrl = $scheme . "://" . $host . "/" . $encodedPath . "/";

DEMO 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM