preg_replace返回空字符串

时间:2013-12-07 13:37:33

标签: php string preg-replace

//Chars to be replaced      
$suchmuster = array();
$suchmuster[0] = 'á';
$suchmuster[1] = 'à';
$suchmuster[2] = 'â';

$suchmuster[3] = 'é';
$suchmuster[4] = 'è';
$suchmuster[5] = 'ê';

$suchmuster[6] = 'í';
$suchmuster[7] = 'ì';
$suchmuster[8] = 'î';

$suchmuster[9] = 'ó';
$suchmuster[10] = 'ò';
$suchmuster[11] = '/ô/';

$suchmuster[12] = 'ú';
$suchmuster[13] = 'ù';
$suchmuster[14] = 'û';

$suchmuster[15] = ' ';
$suchmuster[16] = '.';
$suchmuster[17] = ',';
$suchmuster[18] = '-';
$suchmuster[19] = '_';

//Replaces

$ersetzungen = array();
$ersetzungen[0] = 'a';
$ersetzungen[1] = 'a';
$ersetzungen[2] = 'a';

$ersetzungen[3] = 'e';
$ersetzungen[4] = 'e';
$ersetzungen[5] = 'e';

$ersetzungen[6] = 'i';
$ersetzungen[7] = 'i';
$ersetzungen[8] = 'i';

$ersetzungen[9] = 'o';
$ersetzungen[10] = 'o';
$ersetzungen[11] = 'o';

$ersetzungen[12] = 'u';
$ersetzungen[13] = 'u';
$ersetzungen[14] = 'u';

$ersetzungen[15] = '';
$ersetzungen[16] = '';
$ersetzungen[17] = '';
$ersetzungen[18] = '';
$ersetzungen[19] = '';

$newmessage = preg_replace($suchmuster, $ersetzungen, strtolower($message));

创建上面的代码是为了用普通的字符替换一些特殊的字符,但无论我输入哪个$ nachricht(= $ message),它总是返回一个空字符串!

感谢您的帮助。

修改

我将其更改为:

//Chars to be replaced

$suchmuster[0] = '/ /';
$suchmuster[1] = '/./';
$suchmuster[2] = '/,/';
$suchmuster[3] = '/-/';
$suchmuster[4] = '/_/';

//Replaces

$ersetzungen[0] = '';
$ersetzungen[1] = '';
$ersetzungen[2] = '';
$ersetzungen[3] = '';
$ersetzungen[4] = '';

$newmessage = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', strtolower($message));

$newmessage = preg_replace($suchmuster, $ersetzungen, $newmessage);

它仍然会返回一个空字符串。

3 个答案:

答案 0 :(得分:1)

您也可以将模式合并到:

,而不是使用多种模式
$nachrichtneu = preg_replace('/[,.\s_-]/', '', $nachrichtneu);

并且strtolower不会将Á等转换为á。首先进行iconv转换,然后进行strtolower

答案 1 :(得分:1)

关于您更新的问题:

正则表达式使用特殊控制字符。在您的情况下,它是/./,导致您的结果为空。 .表示正则表达式中的“任何字符”,因此您无需替换每个字符

使用preg_quote()来转义正则表达式中的特殊字符。示例:$xy = '/' . preg_quote('.') . '/';

但是你可以在不使用正则表达式的情况下更简单地做到这一点,例如:

$replaces = array(
    '.' => '',
    ',' => '',
    // ...
);
$message = str_replace(array_keys($replaces), array_values($replaces), $message);

答案 2 :(得分:0)

通过

更改您的代码
$suchmuster = array();
$suchmuster[0] = "/á/";
$suchmuster[1] = "/à/";

...