1

首先,对不起我的英语不好。

我正在使用 Codeigniter。当我在 UTF 8 中创建动态地址时,我得到了奇怪的字符。

网址如下所示:domian.com/article/שלום#.T9H1U9WRGSo

而不是这个:domain.com/article/שלום

链接看起来不错:

<a href="http://www.domain.com/article/שלום">Text</a>

但是在我点击链接后,我会重定向到这里(在除 IE 之外的所有浏览器中):

domain.com/article/שלום#.T9H1U9WRGSo

谢谢你们 :)

4

2 回答 2

1

好的,所以交易是您的 URL 中不能有非 ascii 字符。

字符必须被翻译或编码。

  1. 查看文本帮助文档中描述的 convert_accented_characters() 和 foreign_chars.php;或者
  2. 看一下 codeigniter 的 urlencode(),它将非 ascii 字母编码为正确的 % 代码。

有趣的是,如果您查看像http://en.wiktionary.org/wiki/%D7%A9这样的网站,该符号在 URL 中看起来是正确的,因为浏览器正在为您正确地将 % 代码转换为 ש 符号。

编辑:有些人报告说这种方法有效

$hebrew  = 'ס֑ס֒ס֓ס֔ס֕ס֖ס֗ס֘ס֙ס֚ס֛ס֜ס֝ס֞ס֟ס֠ס֡ס֢ס֣ס֤ס֥ס֦ס֧ס֨ס֩ס֪ס֫ס֬ס֭ס֮ס֯סְסֱסֲסֳסִסֵסֶסַסָסֹוֺסֻסּסֽ־סֿ׀סׁסׂ׃סׄסׅ׆סׇאבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ׳״';  
$config['permitted_uri_chars'] = $hebrew . ' a-z 0-9~%.:_\-';

(老实说,如果字母表错误,请不要怪我:P)

于 2012-06-10T10:48:35.610 回答
0

我无法解释为什么 Codeigniter 可能会将您重定向#URL,但 URL 不能包含非 ASCII 字符。所有非 ASCII 字符都需要使用 % 进行转义urlencode

<a href="http://www.domain.com/article/<?php echo urlencode('שלום'); ?>">Text</a>

由于浏览器应该在幕后执行此操作作为最坏情况的后备,我不能说这会解决问题,但至少它更正确。

于 2012-06-10T11:05:52.190 回答