生成permalink到印地语PHP的博客帖子

生成permalink到印地语PHP的博客帖子,php,permalinks,Php,Permalinks,我有一个表格,其中以下输入来自用户: 博客标题 博客描述 永久链接以访问博客 我正在将博客标题转换为小写,并用破折号(-)替换空格,将其存储在Permalink中以访问博客下面是处理此操作的代码: setlocale(LC_ALL, 'en_US.UTF8'); function toAscii($str, $replace=array(), $delimiter='-') { if( !empty($replace) ) { $str = str_replace((arra

我有一个表格,其中以下输入来自用户:

  • 博客标题
  • 博客描述
  • 永久链接以访问博客
我正在将博客标题转换为小写,并用破折号(-)替换空格,将其存储在
Permalink中以访问博客
下面是处理此操作的代码:

setlocale(LC_ALL, 'en_US.UTF8');

function toAscii($str, $replace=array(), $delimiter='-') {
  if( !empty($replace) ) {
     $str = str_replace((array)$replace, ' ', $str);
  }
     $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
     $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
     $clean = strtolower(trim($clean, '-'));
     $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
     return $clean;
}    

$prmlkn = toAscii($blog_headline, $replace=array(), $delimiter='-');

此代码在
博客标题
为英文之前都可以正常工作。但是如果用户输入
印地语
,那么我只会得到
-
,因为permalink意味着它无法识别印地语POST值。

这是因为印地语使用UTF-8中的扩展字符集,而您正在转换为仅提供拉丁字符的ASCII,因此:

$str = "नमस्ते"
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); // clean is an empty string ""

  • 人物
  • ABNF符号将其终端值定义为非负
    基于US-ASCII编码字符集的整数(代码点)
    [ASCII]。因为URI是一个字符序列,所以必须反转
    为了理解URI语法,需要使用该关系。因此,

    ABNF使用的整数值必须映射回它们的
    通过US-ASCII输入相应字符,以完成语法 规则

    URI由一组有限的字符组成,这些字符包括
    数字、字母和一些图形符号。
    这些字符可用于在
    而剩余的URI字符,包括未保留集和 而那些不作为分隔符的保留字符定义了每个
    组件的标识数据

    您最好使用
    urlencode()
    ,但请注意,这可能会造成非常难看的长永久链接

    $str = "नमस्ते hello";
    $clean = urlencode("$str");
    printf("%s",$clean);
    
    将导致有效但不公开的:

    %E0%A4%A8%E0%A4%AE%E0%A4%B8%E0%A5%8D%E0%A4%A4%E0%A5%87+hello
    

    如果您提供一个示例输入就好了,但简单的答案似乎是印地语,例如
    नमस्ते不是url的有效文本。假设有人将博客标题添加为
    दर्शक इस लिंक पर वीडियो देख सकते हैं然后我希望permalink成为
    दर्शक-इस-लिंक-पर-वीडियो-देख-सकते-हैं基于(RFC 3986)[URL可能只包含ASCII-US小节中的字符。但是,它们可以使用下面我的答案中演示的百分比编码进行编码。