2015-08-06 3 views
0

У меня есть следующий код, чтобы заменить некоторые символы:PHP: str_replace не работает для некоторых символов

<?php 
function xmlEscape($string) 
{ 
    return str_replace(array('&', '<', '>', '\'', '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string); 
} 
$xxx = 'The character & is ampersand and < stands for "less than". '; 

echo xmlEscape($xxx)." <p/>"; 
echo str_replace ('&', '&amp;', $xxx."<p/>"); 
echo str_replace ('character','letter', $xxx); 
?> 

Результатом является:

The character & is ampersand and < stands for "less than". 
The character & is ampersand and < stands for "less than". 
The letter & is ampersand and < stands for "less than". 

только третий работает отлично. Что может быть причиной ? Я когда-то использовал этот код в других скриптах, и эта функция работала. Что делает функцию работы в одном скрипте и не работает в других? Использование Firefox в качестве браузера.

Спасибо.

ответ

1

если вы пытаетесь как этот

echo str_replace ('&', 'amp', $xxx."<p/>"); 

то работает нормально.

"&amp;" является символом юникода, и это рендеринг в браузере, если вы хотите увидеть изменения, проверить его на firebug.

+0

Практически любой символ - символ «Юникод», это идея Юникода. Тем не менее, амперсамп является даже символом ASCII. Я думаю, что это называется «ссылкой на HTML-символ». –

0

Я пробовал ваш код, и он работает правильно. Если вы видите исходный код вашего браузера, вы увидите:

The character &amp; is ampersand and &lt; stands for "less than". <p> 
The character &amp; is ampersand and &lt; stands for "less than". </p> 
<p>The letter &amp; is ampersand and &lt; stands for "less than". 
0

Извините ... Похоже, что он заменен! Но браузер интерпретирует escape-символ и отображает его снова как «&».

Смежные вопросы