【问题标题】:Replacing specific special character in a string of custom tag替换自定义标签字符串中的特定特殊字符
【发布时间】:2014-05-08 14:12:18
【问题描述】:

您好,问题是这样的:我正在通过 fopenfgets PHP 函数读取几个服务器生成的文件 (txt) 来组装 pdf,在某些情况下,源文件 (txt) 有一些特殊标签用于调用另一个文件并将其内容插入标签位置,标签示例:

††PuntosSent††

我尝试了几种方法,但由于 字符,我无法获取标签。我尝试了以下方法,但它们似乎都不适用于替换标签或将字符更改为“可读的”

 str_replace ($this->doc_p_sent  = my custom text value) 

 $full_body = str_replace('††PuntosSent††', $this->doc_p_sent, $full_body);

将字符更改为其他任何内容(也尝试使用\†

$full_body = str_replace('†', '*', $full_body);

我得到这个的最接近的方法是使用这个(适用于带有 的 var,但不适用于 txt 文件中的文本)

iconv("UTF-8", "ISO-8859-1//TRANSLIT", $full_body)

如果我像这样直接使用它,最后一个将 字符更改为+ plus:

iconv("UTF-8", "ISO-8859-1//TRANSLIT", '††PuntosSent††')

我希望这里有人能指出我正确的方向,因为我对此感到疯狂:P

问候别人

【问题讨论】:

标签: php preg-replace special-characters str-replace


【解决方案1】:

最后 :) 唯一可行的方法是更改​​我从文本文件中读取的每一行以获取其 HEX 等效项,并搜索 HEX 模式并将其替换为“可读模式”

我在这里的某个地方找到了这个

private function string_to_hex($string){
    $hex = '';
    for ($i=0; $i<strlen($string); $i++){
        $ord = ord($string[$i]);
        $hexCode = dechex($ord);
        $hex .= substr('0'.$hexCode, -2);
    }
    return strToUpper($hex);
}

然后替换十六进制模式

$line = utf8_encode($line);
$hex_line = str_replace('C286C286', '2B2B', $this->string_to_hex($line));

注意:即使 C286 十六进制值也不是我想要的实际字符,但我相信是他的 utf8-hex 近似值。

最后将 HEX 字符串再次转换为人类可编辑的字符串

$line = $this->hex_to_string($hex_line);

private function hex_to_string($hex){
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2){
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

这让我失去了一点性能......是的,但似乎没有其他工作:(

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多