Jump to content
Sign in to follow this  
SuperThin

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

Share this post


Link to post
Share on other sites

You have another solution is to enter the prodcut name without accent. I do not know if in your language it's important or not.

  • Thanks 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Sign in to follow this  

×
×
  • Create New...

Important Information

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