У меня есть эта проблема. После preg_replace какой-то китайский персонаж стал напуганным персонажем. это сценарий.
$message = strip_tags(mysql_real_escape_string($_POST['message']),'<img><vid>'); echo $message; $message = removewhitespace($message); echo $message; function removewhitespace($a) { return preg_replace('/(\\\r\\\n\\\r\\\n)+/','\r\n\r\n', preg_replace('/^(\\\r\\\n)+|(\\\r\\\n)+$/', '', preg_replace('/\s+/', ' ', preg_replace('/^\s+|\s+$/', '', $a)))); }
Дисплей будет
好不好你好不好
Есть идеи?
Добавьте модификатор 'u' к вашим шаблонам (например, '/(\\\r\\\n\\\r\\\n)+/u' вместо '/(\\\r\\\n\\\r\\\n)+/' ) и убедитесь, что объект находится в UTF-8.
Только таким образом ваш ввод будет интерпретироваться как UTF-8 вместо однобайтовой кодировки.
Используйте \p{Z} вместо \s в вашем регулярном выражении
Символы Unicode занимают несколько байтов, тогда как символы ASCII занимают один. Вероятно, вам нужно сделать многобайтовый поиск mb_ereg_replace http://us2.php.net/manual/en/function.mb-ereg-replace.php