Я сравниваю строку из базы данных со списком строк в массиве:
if (in_array($entry, array('Söme string', 'other-string')))
Это работает для other-string
, но не для Söme string
, главное отличие состоит в том, что в этой строке есть умляут и сущность html. Если $entry
равно Söme string
в базе данных, сравнение не выполняется, даже если это должна быть та же строка.
Я также пытался strcmp
и прямое сравнение, используя ===
и ==
, но сравнение всегда отрицательно. Я также пытался utf8_encode
перед сравнением, но это ничего не сделало.
База данных использует UTF-8, я получаю данные, используя функции Drupal API, и мой php-файл также имеет кодировку UTF-8. Если я выведу $entry
и Söme string
в выходной HTML, они будут неразличимы.
Есть идеи, что может быть причиной такого поведения?
Обновление
Спасибо за помощь. Кажется, что
конвертируется в пути и хранится как реальное неразрывное пространство в базе данных, а не как объект HTML. Печать его преобразует его обратно в сущность HTML (или, может быть, Firebug делает это, когда я смотрю на это).
Вывод var_dump () (с использованием функции печати, взятой из результирующего HTML-источника):
$entry: string(14) "Söme string"
"Söme string": string(18) "Söme string"
(я отредактировал строку, поскольку реальная содержит имя)
Обновление 2
Я изменил строку на "Some string"
и вот вывод
var_dump(bin2hex($entry));
var_dump(bin2hex('Some string'));
$entry: string(24) "536f6d65c2a0737472696e67"
"Some string": string(32) "536f6d65266e6273703b737472696e67"