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

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

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

$i++;
}

我也尝试使用 switch/case 但是当我有像çÇãâ这样的字符时,我无法让图像替换工作,因为它不止一个字符(我正在转换为 HTML 实体,然后在 case ccedil 中搜索,但它不是可能的)

谢谢你

4

2 回答 2

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" />

于 2010-10-19T20:29:12.243 回答
0

由于文件系统之间存在各种不匹配,我会使用诸如Percent Encoding aka URL encoding之类的映射——想象一下这个短语包括“../../etc/passwd”——以及糟糕的(或不存在或不同的)unicode-实施。

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

此外,HTTP/URI 不能“理解”Unicode,只能理解 ASCII。请参阅URL 中的 Unicode 字符,其中讨论了使用的常见编码。现代浏览器会自动进行编码(同时仍会在地址栏中显示 unicode 字形等)。但是,依靠浏览器自动进行这种编码意味着不知情的浏览器将无法正常运行。因此,回到第一段。

于 2010-10-19T22:27:29.013 回答