簡體   English   中英

生成永久鏈接到博客文章Hindi PHP

[英]Generate permalink to a blog post Hindi PHP

我有一種形式,其中以下輸入來自用戶:

  • 博客標題
  • 博客說明
  • 永久鏈接訪問博客

我將Blog標題轉換為小寫,並用dash(-)替換空白, 並將其存儲在Permalink to access blog
下面是處理此操作的代碼:

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='-');

直到Blog headline為英文,此代碼才能正常工作。 但是,如果用戶輸入Hindi那么我只會得到-永久鏈接意味着它無法識別印地語POST值。

發生這種情況是因為印地語使用UTF-8中的擴展字符集,並且您正在轉換為僅提供拉丁字符的ASCII,因此:

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

根據rfc3986

  1. 人物

...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM