需要帮助替换&与&

时间:2010-11-08 21:49:12

标签: php replace html-entities

我不知道为什么我无法用&

替换&

这是我的字符串:/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

有什么建议吗?

更新

是的,它是<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 个答案:

答案 0 :(得分:4)

适合我:

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

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

也许你把它扔进了一个href或src,它在浏览器状态/位置栏中被转义。如果您查看源代码,它将被正确转义。

答案 1 :(得分:1)

对于网址:

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

对于你的问题:

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

替换所有'&'而不替换任何现有的'&amp;'字符。

答案 2 :(得分:1)

Firebug会“自动隐藏”HTML实体。

因此请运行并粘贴原始(查看源,复制,粘贴)结果:

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

我的猜测是:

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

问题很明显,你的文件名中有一个&符号,这很......很棘手;)