簡體   English   中英

php 中的 str_replace 不適用於特殊字符

[英]str_replace in php not working with special characters

我正在嘗試使用以下代碼將所有西班牙語特殊字符替換為可以轉換為 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;
?>

但是上面打印的輸入與我給出的“blusa-tipo-túnica-asimétrica-sin-mangas”完全相同。 為什么? 我究竟做錯了什么?

我替換所有特殊字符的小技巧是將字符串轉換為 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;
    }

注意:確保你的源文件是 UTF-8 編碼的

暫無
暫無

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

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