У нас есть проблема, когда функции дают разные результаты в зависимости от того, на каком сервере он работает.php preg_match_all другой результат в IIS только с конкретным японским символом
Функция заключается в следующем:
<?php
$s='校';
preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches);
Результаты различной в зависимости от окружающей среды:
WAMP (PHP 5.5.12 PCRE 8,34) и
ЛАМПА (php 5.3.3 PCRE 7.8) среды дают одинаковый результат
array (size=3)
0 =>
array (size=1)
0 => string '校' (length=3)
1 =>
array (size=1)
0 => string '' (length=0)
2 =>
array (size=1)
0 => string '' (length=0)
WS2008 IIS7 (PHP 5.4.24 PCRE 8,32)
array(3) {
[0]=> array(2) {
[0]=> string(1) "�"
[1]=> string(1) "�"
}
[1]=> array(2) {
[0]=> string(0) ""
[1]=> string(0) ""
}
[2]=> array(2) {
[0]=> string(0) ""
[1]=> string(0) ""
}
}
Теперь, действительно странно, что с большим количеством различных японских символов, результаты будут правильными на всех средах. Прямо сейчас единственный раз, когда мы могли воспроизвести эту проблему, был этот символ «校». Если это сопровождается (например, $ s = '校正') или только, результат всегда будет отличаться от IIS с тем, что выглядит как проблема с кодировкой « ».
Я первый попытался заглянуть в версию PHP и PCRE версию, но оба старые версии на нашей ЛАМПЕ, так что я думал, что проблема может быть где-то еще ...
С уважением
При работе с строками Unicode вам необходимо передать модификатор '/ u'. Попробуйте ''/". *? (" | $) | ((? <= [\ S ", +]) | ^) [^ \ s", +] +/u''. –
Действительно, это было очень просто, но я не думал об этом, так как другие персонажи работали правильно. Пожалуйста, напишите ответ, и я подтвержу его вам. – TheTrueTDF