将 php 数据发送到文本区域 - 编码问题


Sending php data to textarea - encoding issue

我使用了两个文本区域和一个按钮。这个想法是,当按下按钮时,textarea1 上的所有信息将被发送到 php 函数反转它们,然后在 textarea2 上返回结果(我也在使用 ajax,所以我不必重新加载网站)。

现在的问题是,虽然这适用于正确,但特殊符号存在问题,因为它们在 textarea2 中返回时显示为(尽管不是全部),所以我假设某处的编码存在问题。

这是将结果返回到 textarea2 的简单 php 代码

<?php
$data = rawurldecode($_GET["data"]);
//mb_internal_encoding("UTF-8");
//mb_http_output( "UTF-8" );
// ob_start("mb_output_handler");
echo strrev($data);
?>

如您所见,我已经尝试将内部编码设置为 UTF-8,我也尝试在将数据发送到 php 并在 php 函数中解码它们之前对数据进行编码,但它具有相同的效果。

strrev()将反转字节序列,这对于UTF-8等可变字节长度编码来说不是好消息。可以用一个字节(如 ASCII)表示的 UTF-8 字符是安全的,但那些不安全的字符将被破坏。

您可以使用启用了 Unicode 标志的正则表达式来绕过此 strrev() 限制。

// `u` flag so `.` match Unicode characters and `s` flag so `.` matches `'n`.
preg_match_all('/./us', $str, $matches);
// Reverse the array of matches, and then join the characters back together.
$str = implode(array_reverse($matches[0]));