2013-03-15 1 views
0

Я использую php v5.3. Я хотел бы преобразовать строку в действительный xml. Xml, по-видимому, требует символов «&», которые должны быть закодированы до &, но все функции, которые я могу найти, также преобразуют символы, такие как «ë» в html-объекты, xml не принимает (ë в этом случае). Какую функцию я должен использовать?php string к xml

ответ

4

htmlspecialchars является то, что вам нужно. Это намного более избирательно, в отличие от htmlentities, над тем, что он преобразует.

От htmlentitiesdocumentation:

Эта функция идентична htmlspecialchars() во всех отношениях, за исключением с htmlentities(), все символы, которые имеют HTML-символьный объект эквиваленты переведенный в этих лиц.

<?php 
$a = "I love things & stuffë"; 
$b = htmlspecialchars($a); 
$c = htmlentities($a); 
echo "$b\n$c\n"; 

Выходы:

I love things &amp; stuffë 
I love things &amp; stuff&Atilde;&laquo; 

http://www.php.net/manual/en/function.htmlspecialchars.php

+0

Проблема в том, что если он экспортирует XML, не будет ли htmlspecialchars конвертировать теги <> и другие символы? – aleation

+0

Вот что мне нужно, я думаю, спасибо. Htmlspecialchars преобразует <>, но это не проблема, потому что это не строка xml, она просто должна быть действительной xml. –

0
$str = preg_replace('/\s&\s/', '&amp', $str); 

Это было бы заменить все «&» окружен завершающим и заканчивающийся пробел. Просто работать рисунок на немного, как вам нужно

+0

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

0

Если вы хотите конвертировать & в &amp; вы могли бы попробовать это:

$encoded_str = str_replace('&','&amp;',$original_str); 

Чтобы избежать получить что-то вроде &amp;amp; если изначально был &amp;, один из способов чтобы предотвратить это конвертировать все &amp; в & первого

$encoded_str = str_replace('&','&amp;',str_replace('&amp;','&',$original_str)); 
+0

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

2

При создании XML вы, вероятно, имеют DOMDocument под рукой уже. Даже если нет, вы можете легко создать его. С DOMDocument вы можете создать текст, который 100% хорошо сформированные для XML:

$text = "I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&' characters to be encoded to &amp; but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (&euml; in this case). What function should I use?"; 

$doc = new DOMDocument(); 
echo $doc->saveXML($doc->createTextNode($text)); 

Это дает следующий результат (дословно):

I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&amp;' characters to be encoded to &amp;amp; but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (&amp;euml; in this case). What function should I use?