PHP从字符串中替换特殊字符

5

我有一个清除字符串中特殊字符的clean函数,但是这个函数也会把土耳其字符(ı,ğ,ş,ç,ö)从字符串中删除。

function clean($string) {
   $string = str_replace(' ', ' ', $string); 
   $string = preg_replace('/[^A-Za-z0-9\-]/', ' ', $string); 

   return preg_replace('/-+/', '-', $string); 
}

我该怎么修复它?

2
它正在按照您所告诉的方式进行操作 - 删除任何不是 A-Z、a-z、0-9 或 - 的字符。尝试告诉它不要删除字母,例如 \p{L} - Niet the Dark Absol
我需要:在学校我的同学是“arkadaşım” - Talha Can
5个回答

5

将您想要保留的字符添加到preg中,如果需要,也添加大写字母。 我编辑了您的代码:

function clean($string) {
    $string = str_replace(' ', ' ', $string);
    $string = preg_replace('/[^A-Za-z0-9\-ığşçöüÖÇŞİıĞ]/', ' ', $string);

    return preg_replace('/-+/', '-', $string);
}

测试:

$str='Merhaba=Türkiye 12345 çok çalış another one ! *, !@_';
var_dump(clean($str));
//Output: string(57) "Merhaba Türkiye 12345 çok çalış another one   "

谢谢你,我的朋友,你救了我脱离大麻烦。 - Talha Can

2
您可以使用iconv来替换特殊字符,例如à->a,è->e。
<?php
    $string = "ʿABBĀSĀBĀD";
    echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string);
    // output: [nothing, and you get a notice]
    echo iconv('UTF-8', 'ISO-8859-1//IGNORE', $string);
    // output: ABBSBD
    echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);
    // output: ABBASABAD
    // Yay! That's what I wanted!
    ?>

致谢:

https://gist.github.com/swas/10643194

@dmp@Nisse Engström


1
也许你可以尝试:

function clean($string) {
   $string = str_replace(' ', ' ', $string); 
   $string = preg_replace('/[^A-Za-z0-9ĞİŞığşçö\-]/', ' ', $string); 

   return preg_replace('/-+/', '-', $string); 
}

1
你想替换哪些特殊字符?或许将清理范式从“除了一切以外”改为具体的某些内容会更容易些。
<?php

function garbagereplace($string) {

$garbagearray = array('@','#','$','%','^','&','*');
$garbagecount = count($garbagearray);
for ($i=0; $i<$garbagecount; $i++) {
$string = str_replace($garbagearray[$i], '-', $string);
}

return $string;
}

echo garbagereplace('text@#$text%^&*text');

?>

0
您可以使用以下代码来去除带重音的字符。
function removeAccents($subject){
  //Note:  This is not a complete list of accented characters
  $accented = array('ü','Ü','ú','È','É','Ê','Ë','é','ê','ë','è','£','Ğ','İ','Ş','ı','ğ','ş','ç','ö','Ÿ','ÿ','á','ñ','Ñ','À','Á','Â','Ã','Ä','Å');
  $clean = array('u','U','u','E','E','E','E','e','e','e','e','f','G','I','S','l','g','s','c','o','Y','y','a','n','N','A','A','A','A','A','A');

  $accentcount = count($accented);
  for ($i=0;$i<$accentcount;$i++){
    $subject = str_replace($accented[$i], $clean[$i], $subject);
  }
  return $subject;
}

例如:

removeAccents("el niño");

返回 "el nino"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接