Нужна помощь в замене & на & - PullRequest
1 голос
/ 09 ноября 2010

Понятия не имею, почему не могу заменить & на &

Это моя строка: /Designers/batlak&selvig.jpg.

Это то, что я пробовал до сих пор:

$image = preg_replace("#(&(?!amp;))#U",'&',$brand['image']);
$image = str_replace('&','&',$brand['image']);
$image = htmlspecialchars($brand['image']);
$image = mysql_real_escape_string($brand['image']);
$image = urlencode($brand['image']); // This works, but image will not show
$image = rawurlencode($brand['image']);  // This works, but image will not show

Есть предложения?

обновление

Да, это часть URL-адреса изображения, используемая тегом <img>.
urlencode не работает - тег изображения не понимает формат.

Это ошибка, которую я получаю на W3C Validator:

Validation Output: 1 Error 
Line 84, Column 104: & did not start a character reference. 
(& probably should have been escaped as &amp;.)

ОБНОВЛЕНИЕ 2

Вот как я это тестирую:

<?php 
   $image = str_replace('&','&amp;',$brand['image']); 
   echo $image; 
?>

Выход:
/Designers/batlak&selvig.jpg

Я также тестировал замену $brand['image'] на /Designers/batlak&selvig.jpg

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010

у меня работает:

echo str_replace('&', '&amp;', '/Designers/batlak&selvig.jpg');

// output:
Designers/batlak&amp;selvig.jpg

Возможно, вы добавляете это в href или src, где оно экранируется в строке состояния / местоположения браузера. Если вы посмотрите исходный код, он будет правильно экранирован.

1 голос
/ 09 ноября 2010

Firebug «автоматически скрывает» сущности HTML.

Так что, пожалуйста, запустите и вставьте необработанный результат (Просмотр исходного кода, Копирование, Вставка):

var_dump($brand['image']);
var_dump(urlencode($brand['image']));
var_dump(htmlspecialchars($brand['image']));

Мое предположение будет:

$image = htmlspecialchars(urlencode($brand['image']));

Проблема заключается в том, что в вашем имени файла есть амперсанд, который ... tricky;)

1 голос
/ 09 ноября 2010

Для URL:

$image = urlencode($brand['image'])

На ваш вопрос:

preg_replace('/&(?![A-Za-z0-9#]{1,7};)/','&amp;',$brand['image']);

Заменяет все '&' без замены любых существующих '&amp;' символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...