我想为我的数据库站点创建干净的 URL,并且我决定最好的方法是创建一个字段来存储它们各自条目的 URL。
我正在使用 GenerateUrl 函数(在此处找到)从源名称创建一个干净的 URL:-
function GenerateUrl ($s) {
// Convert accented characters, and remove parentheses and apostrophes
$from = explode (',', "ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u,(,),[,],'");
$to = explode (',', 'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u,,,,,,');
// Do the replacements, and convert all other non-alphanumeric characters to spaces
$s = preg_replace ('~[^\w\d]+~', '-', str_replace ($from, $to, trim ($s)));
// Remove a - at the beginning or end and make lowercase
return strtolower (preg_replace ('/^-/', '', preg_replace ('/-$/', '', $s)));
}
尽管我在使用撇号时遇到了问题,但它在大多数情况下都很好用。
用作引号(即仅触及一侧的另一个字符)它们可以正常工作:- 'Eiffel Tower (Paris)' 成为 URL:eiffel-tower-paris
但用作实际的撇号(即夹在两个字符之间),不太好:- 圣保罗大教堂(伦敦)成为 URL:st-paul-s-cathedral-london
我正在使用 PHP 5.4.3 并且有代码来撤消对魔术引号的修改(这应该是问题的原因)。
非常感谢任何有关解决此问题的建议。
谢谢,
安迪
是的,所需的 URL 是:st-pauls-cathedral-london
我刚刚弄清楚了我给 DOES 工作的原始函数代码(撇号分别在 $from 和 $to 行的末尾被替换为空)。
但是,它似乎只有在我将函数应用于页面上的名称时才有效,即
<?php echo generateurl($attraction['attraction_name']); ?>
但是我目前正在做的是在将数据输入网站时应用 index.php 文件中的函数。我怀疑问题出在我将函数应用于已经应用了以下函数的值(以处理魔术引号)的事实:-
$attraction_name = mysqli_real_escape_string($link, $_POST['attraction_name']);
$attraction_url = generateurl($attraction_name);
我认为在受到mysqli_real_escape_string 的影响之前,我必须改变一些编码以从traction_name 生成URL。我会让你知道我是怎么过的...