Получение пронумерованных объектов XML с PHP 5 DOM - PullRequest
1 голос
/ 18 мая 2010

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

Я создал скрипт PHP, который читает исходный код веб-сайта через cURL, а затем работает с классом DOMDocument для создания файла карты сайта.

Это работает как обаяние почти во всех аспектах. Проблема со спецсимволами.

По соображениям совместимости файлы карты сайта должны иметь все специальные символы, закодированные как пронумерованные объекты. И я не достигаю этого.

Например, одна из моих записей - автоматически считывается с URL-адресов сайта и записывается в файл карты сайта - это:

http://www.somesite.com/serviços/redesign/

В исходном коде это должно выглядеть так:

*http://www.somesite.com/servi**ç**os/redesign/*

Только это. Но, к сожалению, я действительно не понимаю, как это сделать.

Файл исходного кода, заголовки сервера и т. Д. ... все кодируется как UTF-8.

Я использую DOMDocument и соответствующие расширения для создания XML. (В основном, DOMDocument, $ obj-> createElement, $ obj-> appendChild).

htmlentities дает & ccedil; вместо ç str_replace не работает. Это делает персонаж просто исчезающим в выводе.

Я использовал $ obj-> createElement ("loc", $ url); в моем коде, и только сейчас я прочитал в руководстве по PHP, что я должен использовать $ document-> createTextNode ($ page), чтобы иметь поддержку кодирования сущностей.

Ну, это тоже не работает.

Есть идеи, как от этого оторваться?

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Я использовал расширение фильтра:

$ url = filter_var ($ url, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH)

Перед использованием. Это дает лучший результат, чем любые другие решения, которые я пробовал (потому что это RFC-совместимость).

1 голос
/ 18 мая 2010

htmlentities имеет третий аргумент = используемую кодировку, т.е.

htmlentities($string,ENT_COMPAT,"UTF-8");
...