我已经浏览了互联网,我要么找不到答案,要么我无法正确实施。
基本上我正在尝试用PHP实现俄语网站。我已经有了英文和法文的网站,但带来了全新的角色范围,有点打破了测试网站。我的实际目标是在网址中包含西里尔字符,类似于维基百科能够做到这一点> https://ru.wikipedia.org/wiki/Компьютер并且仍然可以在数据库中找到它以显示正确的位置信息。
在我的SQL数据库中,我有一系列地点,例如法国,德国,澳大利亚等国家/地区。我已对其进行了设置,以便使用$ data ['Name']变量从这些条目动态生成位置页面。现在......在header.php文件中,我使用它从数据库中为导航生成位置名称:
<li class="dropdown">
<a href="#">Места</a>
<ul>
<?php if (is_array($locations)) {
foreach ($locations as $key => $location) {
$name = strtolower(str_ireplace(" ","-", $location['name']));
if ($location['top_location'] == 1)
echo '<li><a href="'.$MASTER['base_url'].'location/'.$name.'">'.$location['name'].'</a></li>';
}
}
?>
</ul>
</li>
其中$ name被数据库条目替换。如果我将其中一个数据库条目更改为俄语(例如澳大利亚 - Австралия),那么位置页面会抛出404错误,因为它实际上是在尝试查找location/%D0%90%D0%B2%D1%81%D1%82%D1%80%D0%B0%D0%BB%D0%B8%D1%8F
而不是location/Австралия
。
我的位置页面包含以下代码以从数据库中获取信息:
<?php
include './inc/utils.php';
if (isset($_GET['id'])) {
$name = str_ireplace("-"," ", $_GET['id']);
$result = get_data("Locations", array("name" => $name))[0];
}
else
$result = null;
if ($result != null) {
$data['Name'] = $result['name'];
$data['Url_Name'] = $_GET['id'];
$data['Image'] = $result['image'];
$data['Slider_Text'] = $result['slider_text'];
$data['Description'] = $result['description'];
$data['Country'] = $result['top_location'] != 0 ? true : false;
$data['Cars_In_Location'] = get_cars_in_location($result['id']);
$img_url = $MASTER['car_img_url'];
$link_url = $MASTER['base_url'].'car/';
$cities_id = explode(",", $result['related']);
foreach ($cities_id as $value) {
$data['Related'][] = get_data("Locations", array("id" => $value))[0];
}
}
else {
$data['Name'] = "";
$data['Url_Name'] = "";
$data['Image'] = "";
$data['Slider_Text'] = "";
$data['Description'] = "";
$data['Country'] = false;
$data['Related'] = "";
$data['Cars_In_Location'] = "";
}
if (empty($data['Name']) == true) {
header('HTTP/1.1 404 Not Found');
header('Location: '.$MASTER['base_url'].'404.php');
}
include 'header.php';
?>
我尝试使用urldecode无济于事。我想我在SQL端或其中一个函数文件中遗漏了一些东西。
我的header.php文件包含两者
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
和
header('Content-Type: text/html; charset=utf-8');
以及我的位置页面包含
header('Content-Type: text/html; charset=utf-8');
我的.htaccess文件有
AddDefaultCharset UTF-8
我不知道我还缺少什么。
您可以在此处查看页面:
https://redfoxluxurycarhire.com/ru/location/Австралия
我正在使用print_r($ host_url)来正确打印URL,尽管它显示的内容让您可以看到我的问题。我也能够将Австралия回应到位置页面上,没有任何问题或编码。
任何帮助都会受到高度赞赏,因为我正在困扰我的大脑如何让它发挥作用!
答案 0 :(得分:1)
我会开始检查你是否有任何文件系统编码问题。检查你的脚本是否使用UTF-8,我相信你的MySQL数据库没问题。您应该能够使用urldecode解码请求。