URL PHP中的俄文字符

时间:2017-10-26 15:04:08

标签: php sql urldecode

我已经浏览了互联网,我要么找不到答案,要么我无法正确实施。

基本上我正在尝试用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,尽管它显示的内容让您可以看到我的问题。我也能够将Австралия回应到位置页面上,没有任何问题或编码。

任何帮助都会受到高度赞赏,因为我正在困扰我的大脑如何让它发挥作用!

1 个答案:

答案 0 :(得分:1)

我会开始检查你是否有任何文件系统编码问题。检查你的脚本是否使用UTF-8,我相信你的MySQL数据库没问题。您应该能够使用urldecode解码请求。