Hướng dẫn how can i remove multiple special characters from a string in php? - Làm cách nào để xóa nhiều ký tự đặc biệt khỏi một chuỗi trong php?

Cập nhật

Giải pháp dưới đây có phiên bản "SEO thân thiện hơn":

function hyphenize($string) {
    $dict = array(
        "I'm"      => "I am",
        "thier"    => "their",
        // Add your own replacements here
    );
    return strtolower(
        preg_replace(
          array( '#[\\s-]+#', '#[^A-Za-z0-9. -]+#' ),
          array( '-', '' ),
          // the full cleanString() can be downloaded from http://www.unexpectedit.com/php/php-clean-string-of-utf8-chars-convert-to-similar-ascii-char
          cleanString(
              str_replace( // preg_replace can be used to support more complicated replacements
                  array_keys($dict),
                  array_values($dict),
                  urldecode($string)
              )
          )
        )
    );
}

function cleanString($text) {
    $utf8 = array(
        '/[áàâãªä]/u'   =>   'a',
        '/[ÁÀÂÃÄ]/u'    =>   'A',
        '/[ÍÌÎÏ]/u'     =>   'I',
        '/[íìîï]/u'     =>   'i',
        '/[éèêë]/u'     =>   'e',
        '/[ÉÈÊË]/u'     =>   'E',
        '/[óòôõºö]/u'   =>   'o',
        '/[ÓÒÔÕÖ]/u'    =>   'O',
        '/[úùûü]/u'     =>   'u',
        '/[ÚÙÛÜ]/u'     =>   'U',
        '/ç/'           =>   'c',
        '/Ç/'           =>   'C',
        '/ñ/'           =>   'n',
        '/Ñ/'           =>   'N',
        '/–/'           =>   '-', // UTF-8 hyphen to "normal" hyphen
        '/[’‘‹›‚]/u'    =>   ' ', // Literally a single quote
        '/[“”«»„]/u'    =>   ' ', // Double quote
        '/ /'           =>   ' ', // nonbreaking space (equiv. to 0x160)
    );
    return preg_replace(array_keys($utf8), array_values($utf8), $text);
}

Lý do cho các chức năng trên (mà tôi thấy không hiệu quả - một điều bên dưới là tốt hơn) là một dịch vụ không được đặt tên rõ ràng là kiểm tra chính tả và nhận dạng từ khóa trên URL.

Sau khi mất một thời gian dài đối với sự hoang tưởng của khách hàng, tôi phát hiện ra rằng họ không tưởng tượng ra mọi thứ - các chuyên gia SEO của họ [tôi chắc chắn không phải là một] báo cáo rằng, nói rằng, chuyển đổi "nền kinh tế vi phạm perù" thành viaggi-economy-peru "hành xử tốt hơn" so với viaggi-economy-per ("làm sạch" trước đó đã loại bỏ các ký tự UTF8; Bogotà đã trở thành Bogot, Medellìn trở thành Medelln, v.v.).Bogotà became bogot, Medellìn became medelln and so on).

Ngoài ra còn có một số lỗi chính tả phổ biến dường như ảnh hưởng đến kết quả, và lời giải thích duy nhất có ý nghĩa với tôi là URL của chúng tôi đã được giải nén, những từ ngữ được phát ra và thường lái xe biết các thuật toán xếp hạng nào. Và những thuật toán đó rõ ràng đã được cho ăn bằng các chuỗi được làm sạch UTF8, do đó "perù" trở thành "peru" thay vì "mỗi". "Per" không phù hợp và loại nó vào cổ.

Để cả giữ các ký tự UTF8 và thay thế một số lỗi chính tả, chức năng nhanh hơn bên dưới đã trở thành hàm chính xác hơn (?) Ở trên. $dict cần phải được thiết kế bằng tay, tất nhiên.

Câu trả lời trước

Một cách tiếp cận đơn giản:

// Remove all characters except A-Z, a-z, 0-9, dots, hyphens and spaces
// Note that the hyphen must go last not to be confused with a range (A-Z)
// and the dot, NOT being special (I know. My life was a lie), is NOT escaped

$str = preg_replace('/[^A-Za-z0-9. -]/', '', $str);

// Replace sequences of spaces with hyphen
$str = preg_replace('/  */', '-', $str);

// The above means "a space, followed by a space repeated zero or more times"
// (should be equivalent to / +/)

// You may also want to try this alternative:
$str = preg_replace('/\\s+/', '-', $str);

// where \s+ means "zero or more whitespaces" (a space is not necessarily the
// same as a whitespace) just to be sure and include everything

Lưu ý rằng bạn có thể phải trước tiên urldecode() URL, vì%20 và + cả hai đều thực sự là không gian-ý tôi là, nếu bạn có "không bao giờ%20gonna%20Give%20you%20up" Bạn muốn nó trở thành không bao giờ gonna-give-bạn -Up, không bao giờ 20gonna20give20you20up. Bạn có thể không cần nó, nhưng tôi nghĩ rằng tôi sẽ đề cập đến khả năng.

Vì vậy, chức năng đã hoàn thành cùng với các trường hợp thử nghiệm:

function hyphenize($string) {
    return 
    ## strtolower(
          preg_replace(
            array('#[\\s-]+#', '#[^A-Za-z0-9. -]+#'),
            array('-', ''),
        ##     cleanString(
              urldecode($string)
        ##     )
        )
    ## )
    ;
}

print implode("\n", array_map(
    function($s) {
            return $s . ' becomes ' . hyphenize($s);
    },
    array(
    'Never%20gonna%20give%20you%20up',
    "I'm not the man I was",
    "'Légeresse', dit sa majesté",
    )));


Never%20gonna%20give%20you%20up    becomes  never-gonna-give-you-up
I'm not the man I was              becomes  im-not-the-man-I-was
'Légeresse', dit sa majesté        becomes  legeresse-dit-sa-majeste

Để xử lý UTF-8, tôi đã sử dụng triển khai cleanString được tìm thấy trực tuyến (liên kết bị hỏng kể từ đó, nhưng một bản sao bị tước xuống với tất cả các ký tự UTF8 không quá hosteric ở đầu câu trả lời; cũng dễ dàng thêm nhiều ký tự vào nó nếu Bạn cần) chuyển đổi các ký tự UTF8 thành các ký tự bình thường, do đó bảo tồn từ "nhìn" càng nhiều càng tốt. Nó có thể được đơn giản hóa và được bao bọc bên trong chức năng ở đây để thực hiện.

Chức năng trên cũng thực hiện chuyển đổi sang chữ thường - nhưng đó là một hương vị. Mã để làm như vậy đã được bình luận.

Làm cách nào để xóa 3 ký tự cuối cùng khỏi một chuỗi trong PHP?

Để loại bỏ ba ký tự cuối cùng khỏi một chuỗi, chúng ta có thể sử dụng hàm Subr () bằng cách chuyển phần bắt đầu và độ dài làm đối số.use the substr() function by passing the start and length as arguments.

Làm cách nào để thay thế nhiều ký tự trong một chuỗi trong PHP?

Cách tiếp cận 1: Sử dụng các hàm str_replace () và str_split () trong PHP.Hàm str_replace () được sử dụng để thay thế nhiều ký tự trong một chuỗi và nó có ba tham số.Tham số đầu tiên là mảng các ký tự để thay thế.Using the str_replace() and str_split() functions in PHP. The str_replace() function is used to replace multiple characters in a string and it takes in three parameters. The first parameter is the array of characters to replace.

Làm cách nào để loại bỏ các ký tự duy nhất khỏi chuỗi?

Ví dụ về việc loại bỏ các ký tự đặc biệt bằng phương thức thay thế ()..
Loại bỏ lớp công khai EXPECIALCHARACTERExample1 ..
Công khai tĩnh chính (chuỗi args []).
Chuỗi str = "#chuỗi%này chứa^ký tự*đặc biệt &." ;.
str = str.replaceall ("[^a-za-z0-9]", "") ;.
System.out.println(str);.

Làm cách nào để loại bỏ tất cả các ký tự trước một ký tự cụ thể trong PHP?

Bạn có thể sử dụng chất nền và strpos để thực hiện mục tiêu này.Bạn cũng có thể sử dụng một biểu thức thông thường để chỉ khớp với mẫu bạn muốn.use substring and strpos to accomplish this goal. You could also use a regular expression to pattern match only what you want.