替换自定义标记字符串中的特定特殊字符

时间:2014-03-28 22:32:47

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

问题是这样的:我正在通过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)

这最后一个更改了加上+个字符,如果我直接使用它:

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

我希望这里有人可以指出我正确的方向,因为我疯了这个:P

关心人

1 个答案:

答案 0 :(得分:0)

最后:)唯一的方法就是改变我从文本文件中读取的每一行的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 aproximation。

并最终将HEX字符串再次转换为人类可红色字符串

  

$ line = $ this-&gt; 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;
}

它花了我一点性能......是的,但似乎没有其他工作:(