2010-10-19 25 views
2
$q = "my phrase with special chars like úção!?"; 

while ($i < strlen($q)) { 

echo '<img src="'.$q[$i].'.png" />'; 

$i++; 
} 

我也试图与交换机/情况下,但是当我有字符等C C A A I不能得到的图像替换,因为它的多于一个的字符的工作(我是转换为HTML实体,然后在案件ccedil寻找,但它是不可能的)替换字母(从短语)与图像

谢谢

回答

1

它不会起作用,因为口音是不是允许一个文件名。

解决方法:尝试使用受支持名称的重音命名图像文件。例如:é =>eacute

有了这个代码:

<?php 
$q = "my phrase with special chars like úção!?"; 

while ($i < strlen($q)) { 
    if ($q[$i] == " ") 
    { 
     echo '<img src="space.png" />'; 
} else if ($q[$i] == "?") { 
    echo '<img src="questionmark.png" />'; 
    } else { 
     echo '<img src="'.str_replace(array("&", ";"), "", htmlentities($q[$i])).'.png" />'; 
    } 

    $i++; 
} 
?> 

此代码还支持空间。不过你需要一张名为space.png的图片。

这里是所生成的输出: <img src="m.png" /><img src="y.png" /><img src="space.png" /><img src="p.png" /><img src="h.png" /><img src="r.png" /><img src="a.png" /><img src="s.png" /><img src="e.png" /><img src="space.png" /><img src="w.png" /><img src="i.png" /><img src="t.png" /><img src="h.png" /><img src="space.png" /><img src="s.png" /><img src="p.png" /><img src="e.png" /><img src="c.png" /><img src="i.png" /><img src="a.png" /><img src="l.png" /><img src="space.png" /><img src="c.png" /><img src="h.png" /><img src="a.png" /><img src="r.png" /><img src="s.png" /><img src="space.png" /><img src="l.png" /><img src="i.png" /><img src="k.png" /><img src="e.png" /><img src="space.png" /><img src="uacute.png" /><img src="ccedil.png" /><img src="atilde.png" /><img src="o.png" /><img src="!.png" /><img src="questionmark.png" />

+0

嗯,我不知道重音是不是支持文件名或只是HTML不会允许加载一个像'ç.png'这样的名字的图像 – Cybrix 2010-10-19 20:35:11

+0

根据您的文件系统,它可能都是。 – mattbasta 2010-10-19 23:20:06

0

我会用一个映射如Percent Encoding aka URL encoding因为文件系统之间的各种错配的 - 想象该短语包括“../../etc/passwd” - 和差(或不存在或不同)的unicode实现。

Wiki有一些关于Unicode in HTML;确保正确的编码提示以Content-Type的形式返回给浏览器(例如,不要依赖默认设置),并且FS(以及PHP/Web服务器访问)允许使用Unicode的名称和/或“正在讲话“相同的编码(UTF-8 /百分比编码或其他)。

此外,HTTP/URI不“理解”Unicode,只有ASCII。参见Unicode characters in URLs,其中讨论了使用的常用编码。现代浏览器会自动进行编码(同时仍在位置栏中显示unicode字形等)。但是,依靠浏览器自动执行此编码意味着未察觉的浏览器将无法正常运行。因此,回到第一段。