Jump to content

Vietnamese URL Rewriing


Recommended Posts

Oups ! Ok I see  miss a inside the san.

look in Shop/URls this function : getSkipAccents

Now if you do want you must change something inside this function.

 

The best is to override this function. Copy the files in Custom/Sites/Shop

After, you can change this function like you wish.

  • Thanks 1
Link to post

hello @SuperThin,

 

Could you test (on several specific world)  this please  and tell me if it work ?

 

in includes/Shop/RewriteUrl.php - change the function by this.

In it's work it will be added on next update.

I take different work on your website, and seems now ok inside the the url

Thank you for your comment @SuperThin

/**
     * Remove url accent
     * @param $str
     * @param string $charset
     * @return null|string|string[]
     */
    protected function getSkipAccents(string $str, string $charset = 'utf-8'): string
    {

      if (!extension_loaded('intl')) {
        throw new Exception('intl module not loaded');
      } else {
        $transliterator = \Transliterator::create('Any-Latin; Latin-ASCII');
        $str = $transliterator->transliterate(mb_convert_encoding(htmlspecialchars_decode($str),$charset, 'auto'));
      }

      $str = htmlentities($str, ENT_NOQUOTES, $charset);

      $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
      $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
      $str = preg_replace('#&[^;]+;#', '', $str);
      $str = preg_replace('/[^A-Za-z0-9\-]/', '', $str); // Removes special chars

      return $str;
    }

 

  • Like 4
  • Thanks 2
Link to post
On 10/27/2019 at 10:10 AM, ClicShopping said:

hello @SuperThin,

 

Could you test (on several specific world)  this please  and tell me if it work ?

 

in includes/Shop/RewriteUrl.php - change the function by this.

In it's work it will be added on next update.

I take different work on your website, and seems now ok inside the the url

Thank you for your comment @SuperThin


/**
     * Remove url accent
     * @param $str
     * @param string $charset
     * @return null|string|string[]
     */
    protected function getSkipAccents(string $str, string $charset = 'utf-8'): string
    {

      if (!extension_loaded('intl')) {
        throw new Exception('intl module not loaded');
      } else {
        $transliterator = \Transliterator::create('Any-Latin; Latin-ASCII');
        $str = $transliterator->transliterate(mb_convert_encoding(htmlspecialchars_decode($str),$charset, 'auto'));
      }

      $str = htmlentities($str, ENT_NOQUOTES, $charset);

      $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
      $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
      $str = preg_replace('#&[^;]+;#', '', $str);
      $str = preg_replace('/[^A-Za-z0-9\-]/', '', $str); // Removes special chars

      return $str;
    }

 

Hahaha, thank you very much when pointing me exactly which function in "Mods" (game) :D

 

I will borrow "strip special code" from WordPress to rewrite function getSkipAccents because PHP has never been a Unicode native language support. I don't know why? Many guys from Israel, Euro use English only?

 

I am reading https://is.gd/F2BLnq

Link to post

Hooray!

 

protected function removeVNeseAccents ($str){
      $unicode = array(
          'a'=>'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',
          'd'=>'đ',
          'e'=>'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
          'i'=>'í|ì|ỉ|ĩ|ị',
          'o'=>'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
          'u'=>'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
          'y'=>'ý|ỳ|ỷ|ỹ|ỵ',
          'A'=>'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',
          'D'=>'Đ',
          'E'=>'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',
          'I'=>'Í|Ì|Ỉ|Ĩ|Ị',
          'O'=>'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',
          'U'=>'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',
          'Y'=>'Ý|Ỳ|Ỷ|Ỹ|Ỵ',
       );

      foreach($unicode as $nonUnicode=>$uni){
        $str = preg_replace("/($uni)/i", $nonUnicode, $str);
      }
      
      return strtolower($str);
   }

    protected function getSkipAccents(string $str, string $charset = 'utf-8'): string
    {
      return $this->removeVNeseAccents($str);
    }

Done!

  • Like 5
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use