在 cPanel 部署上的 Laravel 11 中西里尔字母域未正确传递

问题描述 投票:0回答:1

我有一个 Laravel 11 Web 应用程序,在其中实现了一个 IDN 转换器来处理用西里尔字母编写的域,例如 монгол.мон,将它们转换为 Punycode (xn--c1aqbeec.xn--l1acc)。在本地,它运行得很好。但是,在 cPanel 上部署后,西里尔字母域无法正确处理。

这是控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Algo26\IdnaConvert\ToIdn;

class IDNController extends Controller
{
    public function convert(Request $request)
    {
        $domain = $request->input('domain');
        $idn = new ToIdn();
        $output = $idn->convert($domain);
        return response()->json(['output' => $output]);
    }
}

这是 Javascript:

document.getElementById('idn-form').addEventListener('submit', function(event) {
    event.preventDefault();
    
    const domain = document.querySelector('#idn-form input[name="domain"]').value;
    const submitButton = document.getElementById('idn-submit');
    submitButton.disabled = true;

    fetch(`/idn?domain=${domain}`)
        .then(response => response.json())
        .then(data => {
            const resultDiv = document.getElementById('idn-result');
            resultDiv.innerHTML = `<p class="text-[#312E81] text-md font-semibold px-4 py-2 rounded-lg">${data.output}</p>`;
            document.getElementById('copy-button').classList.remove('hidden');
            submitButton.disabled = false;
        })
        .catch(error => {
            console.error('Error:', error);
            document.getElementById('idn-result').innerHTML = `<p class="text-red-500">An error occurred. Please try again later.</p>`;
            submitButton.disabled = false;
        });
});

在本地,此设置运行良好,按预期返回 JSON。但是,在 cPanel 上部署后,我遇到以下问题:当我输入西里尔语域时,没有返回任何内容。在控制器中记录 $domain 后,它显示为空:

[2024-10-03 02:14:03] local.INFO: Domain:   

这是错误日志:

[2024-10-03 02:14:03] local.ERROR: Algo26\IdnaConvert\ToIdn::convert(): Argument #1 ($host) must be of type string, null given, called in /home/cctldmn/cctldmn/app/Http/Controllers/IDNController.php on line 16

当我使用英文字母时,效果非常好。但对于西里尔字母域,输入无法正确传递。可能是编码问题或某些 cPanel 设置问题?关于为什么西里尔字母域名没有被处理有什么想法吗?

javascript php laravel cpanel
1个回答
0
投票

听起来您正面临编码问题。

尝试将

AddDefaultCharset UTF-8
添加到 .htaccess,并验证是否启用
mbstring
扩展,因为它对于处理 UTF-8 等多字节字符编码至关重要。

另一种方法是在将输入发送到后端之前对输入进行编码:

const domain = encodeURIComponent(document.querySelector('#idn-form input[name="domain"]').value);
© www.soinside.com 2019 - 2024. All rights reserved.