我写了一个小函数来用字符串替换变音符号和其他特殊的德语字符。
整个事情看起来像那样:
function replace_german_chars($str)
{
return preg_replace(
array("/\s+/", "@\x{00e4}@u", "@\x{00fc}@u", "@\x{00f6}@u", "@\x{00df}@u"),
array("-", "ae", "ue", "oe", "ss"),
$str);
}
该代码主要受php手册中this评论的影响。
但是,它可以在我的localhost(Mac OSX Yosmite)上运行,但不能在服务器上运行。上面的函数只是替换了特殊的字符。
任何想法?
[UPDATE]
获得足够的许可后,我可以设法插入建议的»ini_sets«。其中一些似乎在整个应用程序生命周期中都存活了“有些”,而有些则没有。在此设置之前使用mb_convert_encoding
有效,但之后没有,并且会为所有匹配返回?
。
我真的不明白这一点。我有点奇怪,因为看起来实际上有多种编码,即使Drupal说它在内部处理utf-8中的所有内容。
[更新#2]
旅程继续,设置mbstring.http_output=UTF-8
让Drupal说:“禁用它”!现在,我没有真正意见可能来自哪里,所以我决定发布页面的http标题:
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 25 Nov 2015 10:07:23 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
Content-Language: de
Link: </node/10>; rel="shortlink",</startseite>; rel="canonical"
X-Generator: Drupal 7 (http://drupal.org)
X-Powered-By: PleskLin
除此之外,还有另一个可能导致问题的原因:phpMyAdmin
内数据库服务器的整体排序规则设置。为了清楚起见,这是一张图片:
数据库服务器本身配置为使用UTF-8
答案 0 :(得分:1)
preg_replace()
期待utf-8
编码的字符串。您似乎已设置了不同的默认编码。然后,您需要转换$str
:
将字符串
str
的字符编码从to_encoding
转换为from_encoding
。
此函数默认将内部字符编码为from_encoding
。如果默认情况下未检测到,请从supported encodings。
<强>代码强>
function replace_german_chars($str)
{
return preg_replace(
array("/\s+/", "@\x{00e4}@u", "@\x{00fc}@u", "@\x{00f6}@u", "@\x{00df}@u"),
array("-", "ae", "ue", "oe", "ss"),
mb_convert_encoding($str, 'UTF-8') );
}
答案 1 :(得分:0)
您问题的最可能解决方案是unicode内容。
您应该在Apache配置中使用以下语法(在httpd.conf或.htaccess中)
AddDefaultCharset utf-8
在配置
下面的php.ini中default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.func_overload=6
mbstring.http_output=UTF-8
mbstring.encoding_translation=On