简体   繁体   English

php 中的 str_replace 不适用于特殊字符

[英]str_replace in php not working with special characters

I am trying the following code to replace all spanish special characters to something that can be converted to an URL.我正在尝试使用以下代码将所有西班牙语特殊字符替换为可以转换为 URL 的内容。

<?php
                $Handle = "blusa-tipo-túnica-asimétrica-sin-mangas";
                $Handle = str_replace( 'à', 'a', $Handle );
                $Handle = str_replace( 'á', 'a', $Handle );
                $Handle = str_replace( 'â', 'a', $Handle );
                $Handle = str_replace( 'ã', 'a', $Handle );
                $Handle = str_replace( 'ä', 'a', $Handle );
                $Handle = str_replace( 'å', 'a', $Handle );
                $Handle = str_replace( 'è', 'e', $Handle );
                $Handle = str_replace( 'é', 'e', $Handle );
                $Handle = str_replace( 'ê', 'e', $Handle );
                $Handle = str_replace( 'ë', 'e', $Handle );
                $Handle = str_replace( 'ì', 'i', $Handle );
                $Handle = str_replace( 'í', 'i', $Handle );
                $Handle = str_replace( 'î', 'i', $Handle );
                $Handle = str_replace( 'ï', 'i', $Handle );
                $Handle = str_replace( 'ð', 'o', $Handle );
                $Handle = str_replace( 'ñ', 'n', $Handle );
                $Handle = str_replace( 'ò', 'o', $Handle );
                $Handle = str_replace( 'ó', 'o', $Handle );
                $Handle = str_replace( 'ô', 'o', $Handle );
                $Handle = str_replace( 'õ', 'o', $Handle );
                $Handle = str_replace( 'ù', 'u', $Handle );
                $Handle = str_replace( 'ú', 'u', $Handle );
                $Handle = str_replace( 'û', 'u', $Handle );
                $Handle = str_replace( 'ü', 'u', $Handle );;
                
                echo $Handle;
?>

But the above prints exactly the same input I give "blusa-tipo-túnica-asimétrica-sin-mangas".但是上面打印的输入与我给出的“blusa-tipo-túnica-asimétrica-sin-mangas”完全相同。 Why?为什么? What am I doing wrong?我究竟做错了什么?

My little trick to replace all special characters is to convert the string to HTML, then replace the special characters by their base letters:我替换所有特殊字符的小技巧是将字符串转换为 HTML,然后用它们的基本字母替换特殊字符:

function strip_accents($str)
    {
        $str = htmlentities($str, ENT_COMPAT, 'UTF-8');
        
        $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
        $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str);
        $str = preg_replace('#\&[^;]+\;#', '', $str);
        
        return $str;
    }

Note: make sure your source file is UTF-8 encoded注意:确保你的源文件是 UTF-8 编码的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM