Unicode preg_replace проблема в PHP - PullRequest
4 голосов
/ 29 июня 2010

У меня есть строка

$result = "bei einer Temperatur, die etwa 20 bis 60°C unterhalb des Schmelzpunktes der kristallinen Modifikation"

, которая идет прямо из таблицы MySQL.Таблица и заголовки php установлены в UTF-8

Я хочу убрать символ 'градуса': http://en.wikipedia.org/wiki/Degree_symbol и заменить его словом 'градусов', чтобы получить:

"bei einer Temperatur, die etwa 20 bis 60degreesC unterhalb des Schmelzpunktes der kristallinen Модификация"

но я не могу заставить его работать с preg_replace.

Если я сделаю:

$result = preg_replace('/\xB0/u'," degrees ", $result ); - I get an empty string

И если я это сделаю ::

$result = preg_replace('/\u00B0/u'," degrees ", $result ); - I get the error:

Предупреждение: preg_replace () [function.preg-replace]: Ошибка компиляции: PCRE не поддерживает \ L, \ l, \N, \ U или \ u со смещением 1 в /var/www/html/include/classes/redeyeTable.inc.php в строке 75

Я не очень хорош с кодировками ... что яздесь делаешь неправильно?

Ответы [ 2 ]

25 голосов
/ 29 июня 2010

Используйте

$result = preg_replace('/\x{00B0}/u'," degrees ", $result );

Пожалуйста, смотрите здесь для получения дополнительной информации о \x{FFFF} -синтаксисе.

Важно отметить разницу между \xB0 и \x{00B0}:

  • \xB0 обозначает один символ с шестнадцатеричным кодом B0 (176 десятичный), который является символом степени (°) в ISO-8859-1, например
  • \x{00B0} обозначает кодовую точку Unicode U+00B0, которая описывает символ степени (°) в системе Unicode. Эта кодовая точка будет кодироваться с использованием двух байтов \xC2\xB0 при использовании кодировки UTF-8.
5 голосов
/ 29 июня 2010

Если вы используете модификатор 'u', шаблон должен рассматриваться как utf-8, так почему бы просто не написать '°' вместо '\ u00B0' или '\ xB0'?

...