PHP регулярное выражение не соответствует декодированной строке utf-8

У меня проблемы с некоторыми regex заявление. Я не уверен, почему это происходит, однако я думаю, что это может быть связано с кодировкой символов.

Поэтому я использую curl для получения содержимого страницы с веб-сайта. Тогда я использую domXPath запросить, чтобы получить определенный элемент, затем из этого элемента я получаю его содержимое, затем из этого содержимого я выполняю regex заявление. Тем не менее regex заявление не работает, и я не знаю почему.

Вот что я получаю от элемента:

X: asdasdfgdgdrrY: dfgdfgfgZ: ukuykyukjghj
  a B 7dd. 

Теперь, когда я пытаюсь сопоставить его с этим кодом:

/X: (?P<x>.*)Y: (?P<y>.*)Z: (?P<z>.*)\s*(?P<a>[a-zA-Z]+) (?P<b>[a-zA-Z]+) (?P<c>[0-9]+)dd/

Я проверил это в Dreamweaver, и оно совпадает, поэтому я понятия не имею, что не будет онлайн

Также на странице, которую я получаю, есть содержимое utf-8,

Я пытаюсь преобразовать содержимое, чтобы удалить символы utf-8, используя

iconv('utf-8', 'ISO-8859-1//IGNORE', $td->item(0)->nodeValue);

если я не удаляю символы utf-8, это странно Á символы после значений переменных "a", "b" и "c".

1 ответ

Решение

Хорошо, я понял это, все, что мне нужно было сделать, чтобы избавиться от этих невидимых недопустимых символов:

$value = preg_replace("/[^a-zA-Z0-9 %():\$.\/-]/",' ',$value);

предварительно просто замените любой символ, который был недействительным, пробелом или пробелом. В моем случае я использовал пробел, потому что оказалось, что некоторые пробелы были недействительными.

Другие вопросы по тегам