如何将一个漂亮的页面标题转换为有效的URL字符串?

Sam*_*Sam 9 php string url url-rewriting

想象一下包含UTF-8中几个单词的任何给定语言(英语,阿拉伯语,日语等)的页面标题字符串.例:

$stringRAW = "Blues & ?????? Bliss's ???? Schön";
Run Code Online (Sandbox Code Playgroud)

现在,这实际上需要转换为该页面的URL的有效部分:

$stringURL = "blues-??????-bliss-????-schön"
Run Code Online (Sandbox Code Playgroud)

只是看看这个链接 这也适用于我的服务器!

Q1.这些天允许哪些字符作为有效网址?我记得在浏览器上看到了一些阿拉伯字符串,我在我的apache 2上测试了它,一切正常.

我猜它必须成为: $stringURL = "blues-blows-bliss-black"

Q2.您知道哪些现有的PHP函数正确编码/转换这些UTF-8字符串,以便将URL从任何无效字符中删除?

我猜到至少:1.空格 should be converted into dashes -
2.删除无效字符?他们是谁? @和'&'?
3.将所有字母转换为小写字母(或者是在网址中有效的capitcal字母?)

谢谢:非常感谢您的建议!

gro*_*gor 11

这是我使用的解决方案:

$text = 'Nevalidní ?eský text';
$text = preg_replace('/[^\\pL0-9]+/u', '-', $text);
$text = trim($text, "-");
$text = iconv("utf-8", "us-ascii//TRANSLIT", $text);
$text = preg_replace('/[^-a-z0-9]+/i', '', $text);
Run Code Online (Sandbox Code Playgroud)

URL中的大写字母不是问题,但如果您希望文本为小写,则只需$text = strtolower($text);在末尾添加:-).


Jos*_*osh 7

我会用:

$stringURL = str_replace(' ', '-', $stringURL); // Converts spaces to dashes
$stringURL = urlencode($stringURL);
Run Code Online (Sandbox Code Playgroud)